2010-09-22 23 views
6

Sto usando il seguente pezzo di codice in modo cookie cutter, in decine di classiEreditare da una classe base che implementa INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

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

Tutti di queste classi implementano INotifyPropertyChanged. Per silenziare i miei allarmi ASCIUTTI, ultimamente ho refactoring queste classi per ereditare la mia classe di base PropertyNotifier il cui unico scopo è quello di fornire NotifyPropertyChanged per le classi che ne ereditano - che sono le dozzine di classi ViewModel nel mio enorme progetto.

Si sente pigro e un po 'sporco. Sto danneggiando le prestazioni o rompendo le buone pratiche di progettazione? Immagino che se la notifica delle modifiche dovesse essere così semplice, ci sarebbe già una classe base nel framework WPF che fa quello che fa la mia classe PropertyNotifier.

Si noti che, per molte ragioni, ho riscontrato problemi di prestazioni con la reattività dell'interfaccia utente, principalmente a causa di un numero elevato di controlli. Quindi sto cercando di tagliare il grasso ovunque io possa. Qualche idea?

risposta

5

Questa è una classe base molto comune da avere nello sviluppo di WPF o Silverlight e non influisce in modo sensibile sulle prestazioni. L'unico problema che ho con PropertyNotifier come una classe base risulta essere limitato all'ereditarietà singola ma che tende ad essere un problema raro con il tipo di classe per cui ne avrai bisogno.

+0

Grazie per la rassicurazione: D – bufferz

3

Sì, è una pratica molto comune. Per un'applicazione su larga scala diventa necessario avere questo tipo di classe base. Abbiamo anche creato uno BaseViewModel per lo stesso scopo; Abbiamo anche implementato un sacco di codice comune (attraverso ViewModels) in questa classe di base come la registrazione, la visualizzazione di messaggi di errore, l'inizializzazione WCF oggetti proxy ecc

+1

Sapevo che le persone li stavano usando, ma alla fine ho avuto un simile tipo di BaseViewModel per caso. È davvero bello avere una classe VM di base da inserire tra WPF ed Entity Framework. Mi fa risparmiare un sacco di lavoro. Io uso principalmente la mia per generare ObservableCollection da un ObjectSet EF e tenere traccia dell'aggiunta/rimozione di nuove Ts e di un Oggetto SelectedItem oltre alla notifica di proprietà delle cose che hai indicato come inizializzazione, oggetti proxy, ecc. – bufferz

2

Un'altra implementazione è la Modello classe del WPF Application Framework (WAF). Fa esattamente la stessa cosa.

+0

Grazie per aver postato questo jbe, sembra un ottimo quadro. Sembra come se avessi reinventato la ruota! – bufferz

Problemi correlati