Yet another INotifyPropertyChanged implementation

Il post di Matteo mi aveva già stuzzicato, ma non conquistato del tutto per un paio di motivi.

La variante riportata oggi da Corrado mi ha suggerito una possibile soluzione che poi si è rivelata forse ancora più “lineare” di quanto mi aspettassi, permettendo di centralizzare il tutto in un unica classe “helper” esterna, con i vantaggi che ne derivano.

Così il “set” riportato da Corrado potrebbe diventare (chiedo venia per non aver ancora installato un code formatter per WLW):

set
{
    if (!(value.Equals(userName))
    {
        userName = value;
        PropertyChangedNotifier.NotifyPropertyChanged(this, PropertyChanged);
    }
}

in cui PropertyChanged é il PropertyChangedEventHandler della classe.

La classe “helper” è la seguente:

public class PropertyChangedNotifier
{
    private PropertyChangedNotifier() { }

    private static StackTrace stackTrace;

    public static void NotifyPropertyChanged(object sender, PropertyChangedEventHandler eventHandler)
    {
        if (eventHandler == null) return;
        if (stackTrace == null) stackTrace = new StackTrace();
        eventHandler(sender, new PropertyChangedEventArgs(stackTrace.GetFrame(1).GetMethod().Name.Remove(0, 4)));
    }
}

Ovviamente non l’ho ancora provata sul “campo” come si deve, comunque l’ho già aggiunta alle “Common”.

 

UPDATE: Come temevo inizialmente (nonostante le mie precedenti verifiche per qualche motivo erroneamente negative), Corrado stesso mi avvisa che in release lo StackTrace non serve allo scopo. Come non detto! :-(

Print | posted @ lunedì 3 agosto 2009 16:22

Comments on this entry:

Gravatar # re: Yet another INotifyPropertyChanged implementation
by Corrado Cavalli at 03/08/2009 17:36

Troppo facile Mario...
La tua soluzione non funziona in release mode in quanto dipendente dalla presenza dei files .pdb.
Prova tu stesso: Compila in release, lancia direttamente l'eseguibile e vedrai che il nome della proprietà non viene passato al sottoscrittore.
Uno dei motivi percui il thread di ieri era lungo era proprio questo... :-)
Gravatar # re: Yet another INotifyPropertyChanged implementation
by Mario Duzioni at 03/08/2009 19:00

Uhm, come temevo hai ragione, ma ho "strani" risultati parziali che non capisco, ovviamente a causa della mia ignoranza. ;-)
Proverò ad approfondire.

Ancora una volta grazie!
Gravatar # re: Yet another INotifyPropertyChanged implementation
by Mario Duzioni at 04/08/2009 16:18

Grazie, ciao!
Comments have been closed on this topic.