2009-09-23 53 views
9

MVVM和WPF什么是处理打开和关闭新窗口和对话框的好方法?开启和关闭应该由ViewModel驱动?但ViewModel不应该知道视图...如何处理使用MVVM打开和关闭新窗口?

+0

我已经在[这篇文章](http://stackoverflow.com/a/15512972/385995)中回答了一个非常类似的问题。 – 2013-03-20 00:32:26

回答

6

我通常使用这个接口。例如,如果我想在单独的窗口中编辑记录,我有一个接口IEditingProvider <TViewModel>,我可以在其他地方实现,然后将接口引用传递给我的ViewModel的构造函数。 EditingProvider可能只是做这样的事情:

class MyRecordEditingProvider: IEditingProvider<MyRecordViewModel> 
{ 
    // Implementation of generic interface method 
    public void Edit(MyRecordViewModel model) { 
     EditWindow edit = new EditWindow(); 
     edit.DataContext = model; 
     edit.ShowDialog(); 
    } 
} 
+0

如何维护可用于应用程序(的某个部分)的EditingProviders,以及如何检索最终将传递给ViewModel的构造函数的正确实例?我想这不是所有的硬连线,但解耦? – bitbonk 2009-09-23 11:09:41

+0

是的,它是分离的。实际上,我正在使用依赖注入框架(Microsoft的复合应用程序块)将通用接口映射到实现。我目前正在代码中执行此操作,但Unity容器也可以使用配置文件进行配置。 – Botz3000 2009-09-23 19:48:41

+0

在调用ShowDialog之前,您是否有MVVM友好的解决方案来设置EditWindow的'Owner'属性?如果没有设置所有者(例如,到MainWindow),则模式对话框可以位于主窗口的后面,这从用户角度来看是非常奇怪和令人困惑的。 – Slauma 2011-03-01 18:52:32