码迷,mamicode.com
首页 > 其他好文 > 详细

使用MVVM的常见误区(1)在ViewModel中和用户交互

时间:2019-06-30 17:31:24      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:mode   main   led   namespace   github   class   com   obj   win32   

缺点,不能进行单元测试

比如,用户在界面点击按钮,实现用户选择一个文件,然后对文件内容进行解析。常见错误如下

 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的常见误区(1)在ViewModel中和用户交互

标签:mode   main   led   namespace   github   class   com   obj   win32   

原文地址:https://www.cnblogs.com/noctwolf/p/11110269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!