這里有很多評論討論MVVM的利弊。對我來說,我同意Nir的觀點(diǎn);這是一個恰當(dāng)?shù)厥褂媚J降膯栴},而且MVVM并不總是合適的。人們似乎已經(jīng)愿意犧牲軟件設(shè)計(jì)的所有最重要的原則,只是為了使它適合MVVM。
盡管如此.我認(rèn)為你的案子很適合做一些重構(gòu)。
在我遇到的大多數(shù)情況下,WPF使您能夠在沒有多個Window
也許你可以試著用Frame
S和Page
S而不是Windows與DialogResult
S.
就你的情況而言,我的建議是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中做同樣的事情。
希望能幫上忙。