我正在编写一个连接到网络资源的应用。
当应用程序连接时,我想使用通常的spinney进度图形和取消按钮弹出叠加层。我为叠加设计了ConnectProgressViewModel
并匹配ConnectProgressView
。
我的问题是从父ViewModel显示/隐藏叠加层的最简洁方法是什么?
A)从我的父ViewModel公开常量ConnectProgressViewModel
,并让ConnectProgressView
将其ConnectProgressViewModel.IsConnecting
属性的可见性绑定。
B)从父ViewModel公开通用Overlay
属性,并在用户想要连接时将其设置为ConnectProgressViewModel
。父视图将ContentControl
绑定到此Overlay
属性,数据模板将处理其余属性。
C)?
第一个似乎更多地封装了功能,应用程序不必关心显示和隐藏叠加层,但是只有偶尔显示时才会出现常量ConnectProgressViewModel
感觉错误。
第二个似乎更适合MVVM,ConnectProgressViewModel
仅在需要时创建,但它将更多功能放在父级上,而且通用Overlay属性也感觉有点奇怪。
干杯
编辑:
我应该澄清一下,这个观点不仅仅是显示忙碌状态。它允许取消/重试和选择不同的网络资源等。为简洁起见,我省略了这些细节,这可能是一个错误,因为人们专注于繁忙的指标。
答案 0 :(得分:1)
我总是只使用Silverlight Toolkit中的BusyIndicator
。它没有取消按钮,但您可以将其设置为具有取消按钮。 BusyIndicator
具有IsBusy
属性,我绑定到ViewModel上的IsBusy
属性。如果您将控件设置为具有按钮的样式,则可以向ViewModel添加取消命令。
修改强>
我刚看到这是WPF而不是Silverlight。我不确定WPF Toolkit是否有BusyIndicator
再次编辑
看起来Extended WPF Toolkit有一个BusyIndicator。请注意,我没有这方面的经验。
答案 1 :(得分:1)
我会在A)中提出类似你的建议,并认为你不应该像B)那样实现通用的东西,直到你真正具备这种程度的灵活性作为要求,比如能够显示不同的叠加视图。 / p>
保持简单!