ConnectProgressViewModel

ConnectProgressViewModel

我正在写一个连接网络资源的应用程序。

当应用程序正在连接时,我想弹出一个带有通常的棘突进度图形和取消按钮的覆盖图。我已经为覆盖设计了一个ConnectProgressViewModel和匹配的ConnectProgressView

我的问题是从父ViewModel显示/隐藏叠加层的最干净方法是什么?

A)从我的父级ViewModel中公开一个恒定的ConnectProgressViewModel,并使ConnectProgressView将其可见性绑定(bind)到ConnectProgressViewModel.IsConnecting属性。

B)从父ViewModel公开通用的Overlay属性,并在用户想要连接时将其设置为ConnectProgressViewModel。父 View 将ContentControl绑定(bind)到此Overlay属性,数据模板处理其余工作。

C)吗?

第一个似乎更多地封装了功能,应用程序不必关心显示和隐藏叠加层,但是始终仅公开显示恒定的ConnectProgressViewModel总是感觉不对。

第二个似乎更适合MVVM,只有在需要时才创建ConnectProgressViewModel,但是它将更多功能放到父级上,并且通用的Overlay属性也有点怪异。

干杯

编辑:

我要澄清的是,此 View 不仅仅显示繁忙状态。它允许取消/重试以及选择不同的网络资源等。为简洁起见,我省略了此类详细信息,这可能是一个错误,因为人们将注意力集中在繁忙的指示器上。

最佳答案

我总是只使用Silverlight工具包中的BusyIndicator。它没有取消按钮,但是您可以将其样式化为一个。 BusyIndicator具有IsBusy属性,我将其绑定(bind)到ViewModel上的IsBusy属性。如果将控件设置为具有按钮的样式,则可以将取消命令添加到ViewModel。

编辑

我只是看到这是WPF而不是Silverlight。我不确定WPF工具包是否有BusyIndi​​cator

再次编辑

看来Extended WPF Toolkit有一个BusyIndi​​cator。注意,我对此没有经验。

关于c# - 在MVVM中实现临时覆盖的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8851878/

10-13 06:52