zoukankan      html  css  js  c++  java
  • 使用MVVM的常见误区(1)在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 模式时,我们究竟在每一层里做些什么?

  • 相关阅读:
    2014第16周六
    2014第16周五
    2014第16周四
    2014第16周三CSS布局再学习摘录
    2014第16周二
    2014第16周一
    2014第15周日
    2014第15周六
    2014第15周五
    SDN:软件定义网络
  • 原文地址:https://www.cnblogs.com/noctwolf/p/11110269.html
Copyright © 2011-2022 走看看