我正在编写一个连接到网络资源的应用。
当应用正在连接时,我想弹出一个带有通常的 spinney 进度图形和一个取消按钮的叠加层。我设计了一个ConnectProgressViewModel
和匹配 ConnectProgressView
用于覆盖。
我的问题是从父 ViewModel 显示/隐藏叠加层的最简洁方法是什么?
A) 暴露常量 ConnectProgressViewModel
来 self 的 parent ViewModel,并拥有 ConnectProgressView
将其可见性绑定(bind)到 ConnectProgressViewModel.IsConnecting
属性(property)。
B) 公开一个通用的 Overlay
来自父 ViewModel 的属性,并将其设置为 ConnectProgressViewModel
当用户想要连接时。父 View 绑定(bind)一个 ContentControl
对此Overlay
属性和数据模板负责其余的工作。
C) ?
第一个似乎更多地封装了功能,应用程序不必关心显示和隐藏叠加层,而是公开常量 ConnectProgressViewModel
当它只是偶尔出现时,总是感觉不对。
第二个似乎更适合 MVVM 与 ConnectProgressViewModel
仅在需要时才创建,但它会将更多功能放在父级上,而且通用的 Overlay 属性也感觉有点奇怪。
干杯
编辑:
我应该澄清一下,这个 View 不仅仅是显示忙碌状态。它允许取消/重试和选择不同的网络资源等。为简洁起见,我省略了这些细节,这可能是一个错误,因为人们专注于忙碌指示器。
最佳答案
我总是只使用 Silverlight 工具包中的 BusyIndicator
。它没有取消按钮,但您可以将其设置为有一个。 BusyIndicator
有一个 IsBusy
属性,我将其绑定(bind)到我的 ViewModel 上的一个 IsBusy
属性。如果将控件设置为具有按钮的样式,则可以向 ViewModel 添加取消命令。
编辑
我刚刚看到这是 WPF 而不是 Silverlight。我不确定 WPF 工具包是否有 BusyIndicator
再次编辑
它看起来像 Extended WPF Toolkit有一个 BusyIndicator。请注意,我没有这方面的经验。
关于c# - 在 MVVM 中实现临时覆盖的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8851878/