視圖模型應該如何關閉表單?我正在努力學習WPF和MVVM問題,但遇到了一個障礙。這個問題很相似,但不完全一樣。作為這個(處理-對話-在-wpf-與-mvvm)...我有一個使用MVVM模式編寫的“Login”表單。此表單具有一個ViewModel,它保存用戶名和密碼,這些用戶名和密碼使用常規數據綁定到XAML中的視圖。它還有一個“Login”命令,它綁定到表單上的“Login”按鈕,使用普通的數據綁定。當“Login”命令觸發時,它將調用ViewModel中的一個函數,該函數將通過網絡發送數據以登錄。當此函數完成時,有兩個操作:登錄是無效的-我們只是顯示一個MessageBox,一切都很好登錄是有效的,我們需要關閉Login表單并讓它返回true作為它的DialogResult...問題是,ViewModel對實際視圖一無所知,那么它如何關閉視圖并告訴它返回特定的DialogResult呢?我可以在CodeBeback中添加一些代碼,并/或將視圖傳遞到ViewModel,但這似乎會完全擊敗MVVM的全部要點.更新最后,我違反了MVVM模式的“純度”,并讓View發布了一個Closed事件,并公開Close方法。然后,ViewModel只需調用view.Close..視圖僅通過接口已知,并通過IoC容器連接起來,因此不會丟失可測試性或可維護性。這似乎相當愚蠢,被接受的答案是-5票!雖然我很清楚一個人在“純粹”的情況下解決一個問題所得到的美好感覺,但我并不是唯一一個認為200行事件、命令和行為只是為了避免以“模式”和“純潔”為名的單行方法的人是有點可笑的。
3 回答

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
Window
Frame
Page
DialogResult
LoginFormViewModel
LoginCommand
LoginFormViewModel
false
UserAuthenticationStates.FailedAuthentication
true
DataTrigger
Setter
Source
Frame
.
DialogResult
DialogResult
- 3 回答
- 0 關注
- 537 瀏覽
添加回答
舉報
0/150
提交
取消