我喜欢这篇代码项目文章中解释的方法:http://www.codeproject.com/KB/WPF/XAMLDialog.aspx http://www.codeproject.com/KB/WPF/XAMLDialog.aspx
它基本上创建了一个 WPF 对话框控件,可以嵌入到另一个窗口或用户控件的可视树中。
然后,它使用样式触发器,只要对话框中有内容,就会打开对话框。
所以在你的xaml中你所要做的就是这样(其中DialogViewModel是你ViewModel中的一个属性):
<MyControls:Dialog Content = {Binding DialogViewModel}/>
在你的 ViewModel 中你只需要执行以下操作:
DialogViewModel = new MyDialogViewModel();
所以在单元测试中你所要做的就是:
MyViewModel model = new MyViewModel();
model.DialogViewModel = new MyDialogViewModel();
model.DialogViewModel.InputProperty = "Here's my input";
//Assert whatever you want...
我个人在 ViewModel 中创建一个 ICommand 属性来设置 DialogViewModel 属性,以便用户可以按下按钮来打开对话框。
所以我的 ViewModel 从不调用对话框,它只是实例化一个属性。该视图解释该内容并显示一个对话框。这背后的美妙之处在于,如果您决定完全更改视图并且可能不显示对话框,则您的 ViewModel 不必进行任何更改。它将所有用户交互代码推送到视图中应有的位置。创建 wpf 控件使我可以在需要时重复使用它...
有很多方法可以做到这一点,这是我发现对我有好处的一种。 :)