c# - 如何正确地从 ViewModel 调用 Dialog?
问题描述
我认为这主要是架构问题。我有一个View
和我的ViewModel
班级设置为DataContext
。View
现在,我有一个绑定到by的点击事件ICommand
。
所以我们有什么,用户点击按钮在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);
推荐阅读
- python - Python请求Json数据,想从excel复制回csv文件
- apache-camel - Camel Bindy 在 Talend ESB Karaf 上给出未解决的依赖错误
- macos - Apple 权限地狱:osascript 和 Accessibility(辅助访问)
- node.js - NodeJs列出具有绝对路径的文件中的文件名
- r - 正则表达式删除不相关的键值 - R
- primefaces - 在 JSF 中使用 PrimeFaces 的 FontAwesome
- excel - VBA 目标变量复制问题
- r - 如何列出每个类别的所有唯一值
- javascript - JOI - 验证复杂对象
- kubernetes - 404 使用 Istio 从 K8s pod 中点击 `metadata.google.internal`