【发布时间】:2018-05-01 10:12:39
【问题描述】:
我们目前正在使用 wpf 和 mvvm 开发桌面应用程序。我们需要显示工具窗口和其他对话框。为了让用户将注意力集中在活动窗口上,主应用使用模糊效果(属性绑定到 ViewModel)进行了模糊处理。
这是一个非常基本的实现草案:
MainWindow.xaml:
<Window
...
Effect={Binding WindowEffect}
>
<Window.DataContext>
<viewmodels:MainWindowViewModel />
</Window.DataContext>
[... Content...]
</Window>
MainWindowViewModel.cs:
SomeMethod() {
WindowEffect = new BlurEffect();
...
[retrieve data from server]
...
[create & show tool window]
...
WindowEffect = null;
}
这种方法基本可行,但存在一些问题。 我知道它不能正确地满足 mvvm 模式,因为我们是通过 ViewModel 直接控制 UI。 实际问题是 BlurEffect 仅在显示工具窗口时生效。我们知道,因为从服务器检索数据确实需要几秒钟...... 此外,如果显示工具窗口,则 BlurEffect 仅可见。如果我们用一些延迟 (Task.Delay) 替换对话框,则看不到模糊。
我的问题是如何正确处理这种方法?
【问题讨论】:
-
您应该使用数据触发器来应用效果并绑定到 bool 而不是 ui 组件。