如果你决定让你的应用程序应用MVVM模式的话,那么对话框的MVVM实现就会成为你要考虑的众多问题中的一个,因为基本上每一个应用程序都会有对话框,你的应用程序可能也不例外。
在用MVVM实现对话框的时候,我们主要会遇到两大问题:
1. ViewModel怎么关闭对话框,或者说怎么处理对话框的一些事件。
2. ViewModel中弹出对话框应该怎么处理 -- 弹出对话框会使UnitTest失败。
第一个问题: ViewModel怎么关闭对话框
假如你实现的对话框中有一个“确定”按钮,并且在ViewModel中有一个对应的命令绑定到这个按钮中,在这个按钮的命令处理函数中你需要关闭这个对话框。由于ViewModel并不知道对话框的存在,所以在ViewModel中是做不到直接关闭对话框的操作的。既然不能直接关闭,那就只能使用间接的方式来关闭对话框。下面介绍其中的一种方式:
定义一个接口:
public interface IDialogRequest
{
event EventHandler RequestClose;
}
让ViewModel实现这个接口,当需要关闭对话框的时候就触发这个事件。
那么谁来注册这个事件,以及在哪里注册?
你可能会直接在对话框的类中写这样的代码来注册RequestClose事件:
IDialogRequest dialogRequest = DataContext as IDialogRequest;
if(dialogRequest != null)
{
dialogRequest.RequestC