使用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 模式時,我們究竟在每一層里做些什么?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM