如何避免在我的 ViewModel 中查看特定代码

2024-02-03

我的应用程序有一个菜单选项,允许创建新帐户。菜单选项的命令绑定到我的 ViewModel 中的命令 (NewAccountCommand)。当用户单击创建新帐户的选项时,应用程序会显示一个“新帐户”对话框,用户可以在其中输入姓名、地址等数据……然后单击“确定”关闭对话框并创建帐户新账户。

我知道 ViewModel 中的代码不正确,因为它创建了“新帐户”对话框并调用 ShowDialog()。以下是虚拟机的片段:

 var modelResult = newAccountDialog.ShowDialog();
 if (modelResult == true)
 {
   //Create the new account             
 }

如何避免从虚拟机内创建和显示对话框,以便我可以对虚拟机进行单元测试?


我喜欢这篇代码项目文章中解释的方法: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 控件使我可以在需要时重复使用它...

有很多方法可以做到这一点,这是我发现对我有好处的一种。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免在我的 ViewModel 中查看特定代码 的相关文章

随机推荐