第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

視圖模型應(yīng)該如何關(guān)閉表單?

視圖模型應(yīng)該如何關(guān)閉表單?

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

3 回答

?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個贊

這里有很多評論討論MVVM的利弊。對我來說,我同意Nir的觀點(diǎn);這是一個恰當(dāng)?shù)厥褂媚J降膯栴},而且MVVM并不總是合適的。人們似乎已經(jīng)愿意犧牲軟件設(shè)計(jì)的所有最重要的原則,只是為了使它適合MVVM。

盡管如此.我認(rèn)為你的案子很適合做一些重構(gòu)。

在我遇到的大多數(shù)情況下,WPF使您能夠在沒有多個Window也許你可以試著用FrameS和PageS而不是Windows與DialogResultS.

就你的情況而言,我的建議是LoginFormViewModel處理LoginCommand如果登錄無效,則將屬性設(shè)置為LoginFormViewModel到適當(dāng)?shù)闹?false或者某些枚舉值UserAuthenticationStates.FailedAuthentication)。對于成功的登錄,您也會這樣做(true或其他枚舉值)。然后使用DataTrigger,它響應(yīng)不同的用戶身份驗(yàn)證狀態(tài),并且可以使用一個簡單的Setter更改Source的屬性Frame.

讓您的登錄窗口返回DialogResult我想這就是你感到困惑的地方DialogResult實(shí)際上是ViewModel的一個屬性。在我使用WPF的有限經(jīng)驗(yàn)中,當(dāng)某些事情感覺不對勁時,通常是因?yàn)槲以诳紤]如何在WinForms中做同樣的事情。

希望能幫上忙。


查看完整回答
反對 回復(fù) 2019-07-06
  • 3 回答
  • 0 關(guān)注
  • 528 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號