2013-05-30 33 views
0

第一個MVVM WPF項目,所以我可能會問一個常見問題,但我無法找到答案的搜索魔術。在MVVM架構中處理依賴關係

我有一些視圖,當某個命令在其中一個被調用時,我需要禁用一些其他視圖。我在我的數據模型中放置了一個布爾標誌,指示它們是否應該啓用,其他視圖可以通過它們的ViewModel綁定來看到更改。但是該模型不是「INotifyPropertyChanged」,所以當我在數據模型中更改該標誌時,什麼都不會更新。那麼需要做什麼才能做到這一點?

+1

讓你的模型實現INPC?讓你的模型實現INPC並不是一件壞事。如果您使用MVVM Light,則從'ObservableObject'繼承Model,而不是'ViewModelBase',這是VM的繼承。 – Viv

+0

這將是合乎邏輯的,Viv! (只是不知道這是否做到了)。 –

+0

或者您可以簡單地在模型中更新數據後引發一些事件...您的其他視圖將訂閱,因此當您提出該事件時,視圖將從模型中讀取數據並進行相應更新。 –

回答

1

評論已經提示一種可能的解決方案:在您的模型中實現INotifyPropertyChanged

但是,還有另一種解決方案可以使您的模型更簡單,並且您的架構層更少耦合。如果您的虛擬機相互依賴並將模型視爲簡單的數據存儲桶,則可以通過自己的INPC實現通知它們,而不是依賴模型。換句話說,如果VM A需要知道模型X何時更改,它可以改爲建立與VM B(包裝模型X)的關係,而不是直接依賴模型X.

0

這正是您的視圖模型的用途!儘管讓你的模型實現INPC沒什麼問題,但是你絕對不應該期望或者依賴它。您的視圖模型是UI-agnostic模型和用戶界面之間的橋樑。

解決您的問題的一種典型方法是創建View-Model類,它們圍繞您的Model類實現INPC。您直接綁定到視圖模型,允許通過INPC在UI中反映這些值的更改。