缺點,不能進行單元測試 比如,用戶在界面點擊按鈕,實現用戶選擇一個文件,然後對文件內容進行解析。常見錯誤如下 和用戶交互的部分(OpenFileDialog),應該放在View中。這裡可以利用命令參數來傳遞文件名 在View中按鈕的單擊事件中,進行交互。如果用戶取消了操作,利用異常取消命令執行 在x ...
缺點,不能進行單元測試
比如,用戶在界面點擊按鈕,實現用戶選擇一個文件,然後對文件內容進行解析。常見錯誤如下
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 模式時,我們究竟在每一層里做些什麼?