2010-09-22 56 views
6

我一直在使用下面的代碼位在一個俗套的方式,在幾十個班級從一個基類實現INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

protected void NotifyPropertyChanged(string propertyName) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

所有這些類的繼承實現INotifyPropertyChanged。爲了消除干擾報警,最近我一直在重構這些類以繼承我的基類PropertyNotifier,其唯一目的是爲繼承它的類提供NotifyPropertyChanged - 在我的大型項目中有幾十個ViewModel類。

感覺很懶,有點髒。我傷害了表現還是破壞了良好的設計實踐?我想如果更改通知應該是這麼簡單,那麼WPF框架中就會有一個基類,它可以做我的PropertyNotifier類所做的。

請注意,由於很多原因,我一直在遇到性能問題與我的UI響應 - 主要是由於大量的控件。所以我正在尋找能夠減肥的地方。有任何想法嗎?

回答

5

這是一個在WPF或Silverlight開發中非常常見的基類,不會明顯影響性能。我將PropertyNotifier作爲基類的唯一問題是受限於單一繼承,但這對於您需要的類型而言往往是一個罕見的問題。

+0

謝謝你的保證:D – bufferz 2010-09-23 14:16:00

3

是的,這是很常見的做法。對於大規模的應用程序來說,有必要擁有這種基類。我們也爲了同樣的目的創建了一個BaseViewModel;我們同樣在該基類像記錄實現了很多(橫跨的ViewModels)公用的代碼,顯示錯誤消息,初始化WCF代理對象等

+1

我知道人們正在使用它們,但是我最終發現了一個類似的BaseViewModel。將基礎VM類放入WPF和Entity Framework之間真的很不錯。它爲我節省了大量的工作。我主要用於從EF ObjectSet生成ObservableCollection ,並跟蹤添加/刪除新的Ts,以及SelectedItem T除了屬性通知您指出的東西,如初始化,代理對象等 – bufferz 2010-09-23 14:20:14

2

另一種實現是模型類的WPF Application Framework (WAF)。它完全一樣。

+0

感謝發佈這個jbe,看起來像一個很棒的框架。看起來好像我已經改造了車輪! – bufferz 2010-10-02 21:07:53

相關問題