Eventuali duplicati:
typesafe NotifyPropertyChanged using linq expressionsImplementazione NotifyPropertyChanged senza fili magici
sto lavorando su una grande domanda di squadra che soffre di un uso pesante di stringhe di magia sotto forma di NotifyPropertyChanged("PropertyName")
, - l'implementazione standard quando si consulta Microsoft. Stiamo anche soffrendo di un gran numero di proprietà errate (che funzionano con un modello a oggetti per un modulo di calcolo che ha centinaia di proprietà calcolate) - tutte collegate all'IU.
La mia squadra ha molti bug relativi alle modifiche del nome della proprietà che portano a stringhe magiche scorrette e vincoli di rottura. Desidero risolvere il problema implementando notifiche di proprietà modificate senza utilizzare stringhe magiche. Le uniche soluzioni che ho trovato per .Net 3.5 riguardano espressioni lambda. (Ad esempio: Implementing INotifyPropertyChanged - does a better way exist?)
mio direttore è estremamente preoccupato per il costo delle prestazioni di commutazione da
set { ... OnPropertyChanged("PropertyName"); }
a
set { ... OnPropertyChanged(() => PropertyName); }
dove il nome viene estratto da
protected virtual void OnPropertyChanged<T>(Expression<Func<T>> selectorExpression)
{
MemberExpression body = selectorExpression.Body as MemberExpression;
if (body == null) throw new ArgumentException("The body must be a member expression");
OnPropertyChanged(body.Member.Name);
}
Considera un'applicazione come un foglio di calcolo in cui, quando un parametro cambia, circa un centinaio di valori vengono ricalcolati e aggiornati sull'interfaccia utente in tempo reale. Rendere questo cambiamento così costoso da influire sulla reattività dell'interfaccia utente? Non posso nemmeno giustificare il test di questo cambiamento in questo momento, perché ci vorrebbero circa 2 giorni per aggiornare i setter di proprietà in vari progetti e classi.
Uso la riflessione per questo. Vedi il mio post sul blog qui su questo. [http://tsells.wordpress.com/2011/02/08/using-reflection-with-wpf-and-the-inotifypropertychanged-interface/](http://tsells.wordpress.com/2011/02/08/using-reflection-with-wpf-and-the-inotifypropertychanged-interface /) Presta molta attenzione alla nota sulle prestazioni in fondo al post. – tsells
Buon articolo, ma hai dato una differenza assoluta in termini di prestazioni, ma non è utile. Sarei molto più interessato alla differenza percentuale nei tempi di esecuzione. C'è un'enorme differenza tra passare da 200 ms a 300 ms e andare da 0,01 ms a 100,01 ms. Stessa differenza assoluta, differenza percentuale diversa. – Alain
Ha detto che la differenza era di circa 1/4 di secondo per 10.000 notifiche di modifica delle proprietà. Non penso che questa sia una differenza abbastanza grande da preoccuparsene, e se davvero aggiorni più di 10.000 proprietà in una volta, riconsidererei seriamente il design :) – Rachel