使用MVVM的常见误区在ViewModel中和用户交互
Posted noctwolf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用MVVM的常见误区在ViewModel中和用户交互相关的知识,希望对你有一定的参考价值。
缺点,不能进行单元测试
比如,用户在界面点击按钮,实现用户选择一个文件,然后对文件内容进行解析。常见错误如下
1 using Microsoft.Win32; 2 3 namespace View和ViewModel分工 4 5 public class MainWindowViewModel 6 7 public void ParseFile() 8 9 OpenFileDialog openFileDialog = new OpenFileDialog(); 10 if (openFileDialog.ShowDialog() == true) 11 12 //解析文件 13 14 15 16
和用户交互的部分(OpenFileDialog),应该放在View中。这里可以利用命令参数来传递文件名
1 namespace View和ViewModel分工 2 3 public class MainWindowViewModel 4 5 public void ParseFile(string fileName) 6 7 //解析文件 8 9 10
在View中按钮的单击事件中,进行交互。如果用户取消了操作,利用异常取消命令执行
1 private void Button_Click(object sender, RoutedEventArgs e) 2 3 OpenFileDialog openFileDialog = new OpenFileDialog(); 4 if (sender is Button button && openFileDialog.ShowDialog() == true) 5 button.CommandParameter = openFileDialog.FileName; 6 else 7 throw new UserCanceledException(); 8
在xaml部分,按钮同时指定Click和Command
<Button Command="Binding ParseFileCommand" Click="Button_Click" Content="选择一个文件解析"/>
完整示例在我的Github中
推荐当我们使用 MVVM 模式时,我们究竟在每一层里做些什么?
以上是关于使用MVVM的常见误区在ViewModel中和用户交互的主要内容,如果未能解决你的问题,请参考以下文章
使用 TabControl (MVVM) 显示不同的 ViewModel
iOS 中使用 MVVM,复杂的 Cell 的 ViewModel 应该如何去写