首页 > 解决方案 > 如何正确地从 ViewModel 调用 Dialog?

问题描述

我认为这主要是架构问题。我有一个View和我的ViewModel班级设置为DataContextView现在,我有一个绑定到by的点击事件ICommand

所以我们有什么,用户点击按钮在View我得到这个事件ViewModel,我想打开Dialog.

至于我Dialog,它与一个相关联View并且View应该打开这个对话框,所以它意味着这个方法

public void OpenDialog(){...}

应该驻留,我应该以某种方式从我获得点击事件的地方View调用此方法。ViewModel

问题是:

标签: c#wpfdata-binding

解决方案


您可以使用以下签名在视图模型上创建属性:

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);

推荐阅读