如何正确地从视图模型调用对话框?



我认为这主要是架构问题。我有一个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);

最新更新