使用MVVM的常見誤區(1)在ViewModel中和用戶交互

缺點,不能進行單元測試html

好比,用戶在界面點擊按鈕,實現用戶選擇一個文件,而後對文件內容進行解析。常見錯誤以下git

 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中。這裏能夠利用命令參數來傳遞文件名github

 1 namespace View和ViewModel分工
 2 {
 3     public class MainWindowViewModel
 4     {
 5         public void ParseFile(string fileName)
 6         {
 7             //解析文件
 8         }
 9     }
10 }

在View中按鈕的單擊事件中,進行交互。若是用戶取消了操做,利用異常取消命令執行mvvm

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和Commandpost

        <Button Command="{Binding ParseFileCommand}" Click="Button_Click" Content="選擇一個文件解析"/>

完整示例在個人Github單元測試

推薦當咱們使用 MVVM 模式時,咱們究竟在每一層裏作些什麼?測試

相關文章
相關標籤/搜索