我认为这主要是架构问题。我有一个View
,我的ViewModel
类设置为DataContext
.现在,我有一个由ICommand
绑定到View
的单击事件。
所以我们有什么,用户单击按钮View
我在ViewModel
中得到这个事件,我想打开Dialog
.
至于我Dialog
它与View
相关联,View
应该打开这个对话框,所以这意味着这种方法
public void OpenDialog(){...}
应该驻留在View
,我应该以某种方式从我得到点击事件的ViewModel
调用此方法。
问题是:
- 如果我以正确的方式理解这种 MVVM WPF 方法
- 如何建立此连接(最佳实践(
您可以使用以下签名在视图模型上创建属性:
public Func<string, string, bool> ReportMessage { get; set; }
然后在构造视图模型时,您可以向其传递一个实现:
var OKCancelMessage = new Func<string, string, bool>((m, c) => MessageBox.Show(m, c) == MessageBoxResult.OK ? true : false);
new ViewModel()
{
ReportMessage = OKCancelMessage
}
这样,您的视图模型将不知道消息的实现,并且已经实现了视图与模型的分离。
编辑
调用该函数很简单:
if(ReportMessage("Do you really want to delete this record?", "Question"))
Delete(record);