缺點,不能進行單元測試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中單元測試