我非常喜欢WPF& MVVM范例,我正在努力吸收它。我遇到的问题看起来像很多MVVM的初学者都面临同样的问题。似乎没有简单的方法。因此,为了使问题域保持简单,这只是一项实验性工作。
我有一个MainWindow,上面有一个“新建”按钮。我想在单击此按钮时显示NewWindow.xaml的实例。我怎么能从MainWindowViewModel做到这一点?调解员模式有帮助吗?请提出任何良好的实施参考。
我在MainWindow&上也有一个“关闭”按钮。我想点击这个时退出应用程序。我再次需要帮助:(
答案 0 :(得分:2)
我之前确实遇到过同样的问题。
至少我使用一种非常简单的方法,我很满意。 here是我的解决方案。
在您的viewmodel中,您只需编写一行代码:
var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", newdialogwindowVMgoeshere);
//do what you want with the dialogresult
答案 1 :(得分:1)
我将对话框代码放入View的CodeBehind中。我仍然通过ViewModel路由命令,但ViewModel调用View的实现并获得结果。
假设我有MainWindow View(xaml)和MainWindow ViewModel,我想保存文件。
在codebehind View(MainWindow.xaml.cs)中,我添加代码来创建对话框并返回保存文件名:
public FileInfo OpenSaveFileDialog(string title, string filter)
{
var dialog = new SaveFileDialog
{
Filter = filter,
Title = title
};
var result = dialog.ShowDialog();
if (!result.Value) return null;
return new FileInfo(dialog.FileName);
}
在ViewModel中我有一个DoSaveFile()方法:
public void DoSaveFile()
{
var file = OpenSaveFileDialog("Save File", "Super files (*.super)|*.super |All files (*.*)|*.*");
if (file == null) return;
//Save logic...
}
public DelegateCommand SaveFile { get { return Get("SaveFile", new DelegateCommand(DoSaveFile, () => true)); } }
在MainWindow.xaml中,我有一个绑定到委托命令的按钮:
<Button Content="Save File" Command="{Binding SaveFile}"/>
与MVP一样,这种实现很健谈,但它对于关注点的测试和分离非常有效。对我来说,将窗口开放的机制留给View类是有意义的,甚至认为它有点像活动视图。