缺点,不能进行单元测试

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

 using Microsoft.Win32;

 namespace View和ViewModel分工
{
public class MainWindowViewModel
{
public void ParseFile()
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == true)
{
//解析文件
}
}
}
}

和用户交互的部分(OpenFileDialog),应该放在View中。这里可以利用命令参数来传递文件名

 namespace View和ViewModel分工
{
public class MainWindowViewModel
{
public void ParseFile(string fileName)
{
//解析文件
}
}
}

在View中按钮的单击事件中,进行交互。如果用户取消了操作,利用异常取消命令执行

         private void Button_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (sender is Button button && openFileDialog.ShowDialog() == true)
button.CommandParameter = openFileDialog.FileName;
else
throw new UserCanceledException();
}

在xaml部分,按钮同时指定Click和Command

        <Button Command="{Binding ParseFileCommand}" Click="Button_Click" Content="选择一个文件解析"/>

完整示例在我的Github

推荐当我们使用 MVVM 模式时,我们究竟在每一层里做些什么?

最新文章

  1. 理解 OpenStack + Ceph (1):Ceph + OpenStack 集群部署和配置
  2. LDA-math-神奇的Gamma函数
  3. highcharts 图表库的简单使用
  4. Codeforces 633D Fibonacci-ish 暴力
  5. 黑马程序员_Java_String
  6. C语言指针操作
  7. pip错误-failed to create process/fatal error in launcher
  8. vue项目性能优化,优化项目加载慢的问题
  9. 关于商米D1S,USB默认权限在关机后丢失的FAQ
  10. 用commander.js构建自己的脚手架工具
  11. oracle 定义临时变量,并使用分支判断
  12. 一本通1623Sherlock and His Girlfriend
  13. 【LOJ】#121. 「离线可过」动态图连通性
  14. iOS开发--libxml/HTMLparser.h file not found 解决方法 (libxml.dylib错误处理)
  15. 《Effective Python:编写高质量Python代码的59个有效方法》读书笔记(完结)
  16. Object类中通用方法之:toString()方法
  17. jmeter-The JVM should have exitted but did not
  18. 51nod1289 stack
  19. CentOS 7 安装Memcached服务
  20. P3386 【模板】二分图匹配

热门文章

  1. WPF listview item mouse enter/over popup
  2. VS创建新的本地数据库
  3. XF 标签页面
  4. miniui处理多重子表级联,一次性提交多表数据的ui要点
  5. 零元学Expression Blend 4 - Chapter 34 啊~!!我不要毛毛的感觉!-使用布局修整「UseLayoutRounding」
  6. 【Python】:拓展Queue实现有序不重复队列
  7. webform的图片防盗链
  8. Linux下的软件安装
  9. TApplicationEvents的前世今生(待续)
  10. Delphi 的RTTI机制浅探3(超长,很不错)