2010-08-25 77 views
0

我想在我的WPF應用程序中使用MVVM,該應用程序顯示數據來自業務邏輯層中的數據,名爲'Employee',屬性爲'Salary 」。我有一個簡單的XAML窗口,帶有一個文本框,並綁定到ViewModel類'EmployeeViewModel'中的Salary屬性。 ViewModel實現INotifyPropertyChanged,以便當EmployeeViewModel的Salary屬性發生更改時,XAML文本框中的值也會更改。所有的工作正常。MVVM WPF確保ViewModel是最新的業務層/後端的最佳方法

現在,EmployeeViewModel的Salary屬性從Employee類的Salary屬性中獲取其值。但是,如果Employee類的Salary值由業務邏輯層中正在進行的其他過程更改,它不會在EmployeeViewModel中自動更新。什麼是最好的方式來做到這一點?我正在考慮Employee類中的一種INotifyPropertyChanged實現,它讓EmployeeViewModel知道自己進行更新。或者我應該使用依賴屬性?或者,我應該有一個過程,一旦完成業務邏輯層中的所有更改,就會刷新ViewModel。任何幫助感謝!

回答

0

我的想法

,如果你對你的業務實體執行INotifyPropertyChanged,您將創建業務實體和您的視圖模型之間的耦合。

您的模型不應該像INotifypropertychanged這樣的特定功能。

2-如果您使用的是Prism Framework,那麼使用EventAgreegator是一種純粹的分離方式在模塊之間進行通信。當你說「我有‘刷新’的視圖模型一旦所有的業務邏輯層的變化已完成的程序」

+0

感謝您的幫助。經過一番思考,我決定採用第三種方案。我所有的ViewModel現在屬於一個名爲AllViewModel的集合,它通過每個ViewView調用每個ViewModel中的Refresh方法。 Refresh方法遍歷ViewModel中的每個屬性,並使用BusinessModel中的相應屬性進行更新,然後觸發OnPropertyChanged。 – Caustix 2010-09-07 16:57:14

0

我強烈建議您在業務對象(Employee)上實現INotifyPropertyChanged,並註冊視圖模型上的更改。

如果你真的想留下儘可能多的POCO,你可以,你可以聲明接口,並添加名爲RaisePropertyChanged的公共方法(字符串propertyName的),只是把它當你的經營業務邏輯終點。

+0

好了,INotifyPropertyChanged的位似乎

3-你的第三個選擇點聽起來不錯前進的道路。因此,如果我在員工的薪資上放置了一個OnPropertyChanged,那麼EmployeeViewModel中的薪水每次在Employee中更改時都會自動更新自己?或者我需要一些額外的代碼來讓EmployeeViewModel'聽'? – Caustix 2010-08-25 14:26:31

相關問題