【发布时间】:2017-03-08 12:55:24
【问题描述】:
想象一下,您想要一个 Save & Close 和一个 Cancel & Close 按钮在您花哨的 WPF MVVM 窗口上?
你会怎么做? MVVM 规定您将按钮绑定到 ICommand,控制反转规定您的 View 可能知道您的 ViewModel,但反之则不然。
在网上搜索,我找到了一个解决方案,它有一个 ViewModel 关闭事件,View 订阅如下:
private void OnLoaded(Object sender
, RoutedEventArgs e)
{
IFilterViewModel viewModel = (IFilterViewModel)DataContext;
viewModel.Closing += OnViewModelClosing;
}
private void OnViewModelClosing(Object sender
, EventArgs<Result> e)
{
IFilterViewModel viewModel = (IFilterViewModel)DataContext;
viewModel.Closing -= OnViewModelClosing;
DialogResult = (e.Value == Result.OK) ? true : false;
Close();
}
但那是我迄今为止设计得非常好的 MVVM 的代码隐藏。
另一个问题是在显示主窗口时显示许可问题消息框。我可以再次像上面那样使用Window.Loaded 事件,但这也破坏了 MVVM,不是吗?
在这些情况下,是否有一种干净的方法,或者应该务实而不是迂腐?
【问题讨论】:
-
"MVVM 指示您将按钮绑定到 ICommand" 是吗?您仍然可以添加 Click 处理程序而不会破坏任何内容。务实。
-
mvvm != 没有代码隐藏。另一方面,模式为我们服务,我们不为模式服务。
标签: c# wpf mvvm data-binding code-behind