我已經閱讀了將模型數據中的更改傳達給視圖模型的各種方法。 有些人建議模型應儘可能實現INotifyPropertyChanged,以便它可以通知視圖模型中已更改的屬性。有些人建議在模型和視圖模型之間建立一個服務層,服務層實現INPC,方法調用通過這個服務層路由到模型,以便服務層通知視圖模型。WPF MVVM:INPC和調解視圖模型和模型之間的通信
我認爲後者是前者的更細粒度的修訂,並已開始在我的模型類中實現INPC。這感覺不對,因爲
a)我現在必須在我的視圖模型中編寫事件處理程序,以獲取來自模型的通知。 這採用長開關(propertyName)的形式,它在視圖模型上設置相應的屬性,使NPC再次向上發送。我覺得我在這裏寫了很多的鍋爐板代碼。
b)視圖模型現在通過一堆只依照慣例調整的字符串(即沒有定義「接口」)耦合到我的模型。更不用說這會導致IDE的困難。
c)我的模型必須修改以適應這種情況!如果由於某種原因關閉了會怎樣?我認爲這樣的模式是爲了提高代碼的可重用性而設計的。不僅如此,啓動INPC事件所需的代碼是單調乏味且重複的,並且不是真正可抽象的。
我真的很想知道WPF專業人員是如何通過依賴屬性等來解決這個問題的。我感覺我錯過了一些東西。我不喜歡使用框架,因爲他們想從頭開始學習。 我已經離開WPF一兩年了,最近和AngularJS合作讓我質疑我的方法。
謝謝!
當你說'模型'時,你指的是什麼?您是指業務對象/數據類型類,與數據源連接的代碼,還是兩者? – Sheridan
我指的是業務數據和功能。 在這種情況下,我的模型類是使用VM「TestViewModel」「TestPlanViewModel」的「Test」(屬性如「Description」,「Result」,方法如「Run」)和「TestPlan」。 –
您的模型不需要INPC,只需要您的視圖模型。這就是你的虛擬機的全部內容 - 我看到有人把INPC放在他們的模型中,但它讓我覺得它只是一個視圖模型,而不是一個模型。 –