Prism2/MVVM从ViewModel关闭视图

Raj*_*Raj 5 wpf prism mvvm

如何从ViewModel关闭View?

我有一个WPF窗口,它定义了多个Regions并用作Shell来托管我的应用程序的视图.我希望View能够从Region中删除自己,或者从标签容器中关闭它.如何从ViewModel完成此行为.

Jul*_*lin 7

由于您ViewModel没有(也不应该)引用该引用View,因此无法直接关闭它.不过,你可以做的就是添加一个Event在您的ViewModel,以表明它要被关闭.

乔什史密斯写了一篇文章,展示了如何做到这一点(大约在文章的一半).


Jer*_*ill 5

这实际上取决于您的应用程序架构,但这是我如何使用Prism进行的.

首先,我想说,这是确定有你的VM引用视图一样长,因为它不是一个具体的实现来看,即通过接口引用.

我使用依赖注入将View和ViewModel结合在一起,这与在StockTraderRI中完成的方式非常相似.所以我有一个IView和一个IViewModel.IViewModel有一个名为"View"的IView类型.

从代码层(对我来说,通常是控制器...请参阅StockTraderRI)与您的区域一起使用,添加机制以从区域中删除您的视图.

例如:

myRegion.Remove(myIViewModel.View);
Run Code Online (Sandbox Code Playgroud)

如果区域由控制器处理,您可能希望在VM上放置一个简单事件,以便在VM想要"关闭"时通知.如果您希望使用弱事件模型,也可以尝试使用IEventAggregator.如果在VM中处理该区域,只需在那里添加该代码即可.