您也可以使用事件来执行此操作。尽管您在后面的视图代码中需要 3 行代码(一些 MVVM 纯粹主义者不喜欢这样);
在您的视图模型中,您创建一个视图可以订阅的事件:
public event CloseEventHandler Closing;
public delegate void CloseEventHandler();
private void RaiseClose()
{
if (Closing != null)
Closing();
}
在您的视图中,您在 initializecomponent 方法之后订阅事件,如下所示:
public View
{
*//The event can be put in an interface to avoid direct dependence of the view on the viewmodel. So below becomes
//ICloseView model = (ICloseView)this.DataContext;*
ProgressWindowViewModel model = (ProgressWindowViewModel)this.DataContext;
model.Closing += Model_Closing;
}
private void Model_Closing()
{
this.Close();
}
当您准备好从 ViewModel 关闭视图时,您只需调用 RaiseClose()。
您甚至可以使用此方法从视图模型向视图发送消息。
可以将事件放在接口中,以避免视图直接依赖于视图模型。