Collegare una proprietà di una classe ad un elemento di WPF implementando INotifyPropertyChanged è facilissimo da fare (anche se verboso) quando abbiamo una nostra classe, ma diventa "un po' antipatico" in casi leggermente più complessi. Mi ci sono impuntato scrivendo una piccolissima applicazione di data logging che deve ricevere e registrare i dati provenienti da una bilancia via RS232.
Per farla semplice: ho una classe Bilancia che ha un campo comPort di tipo SerialPort e una proprietà ComPort { get; }
Il problema nasce dal fatto che la classe SerialPort non è stata pensata per essere "WPF friendly" e non implementa INotifyPropertyChanged e questo mi crea problemi perchè vorrei bindare la TextBox relativa alla porta com utilizzata con il valore di bilancia.ComPort.PortName
Per risolvere la questione dovrei creare una classe che estende SerialPort, a cui far implementare l'interfaccia INotifyPropertyChanged ma lo devo fare wrappando la classe perchè non è possibile eseguire l'override del membro ereditato 'System.IO.Ports.SerialPort.PortName.get' visto che non è contrassegnato come virtual, abstract o override (copiato paro paro dal messaggio di errore di Visual Studio).
Per giunta, a rendere la questione ancora più ingarbugliata, c'è il post Is INotifyPropertyChanged an anti-pattern? di Neil Mosafi che è molto interessante e provocante, insieme al post INotifyPropertyChanged -- Searching for a Better Way di Jeff Handley.
Maremma scribacchina, non si finisce mai di studiare! Quando pensi di aver capito qualcosa e di poterlo applicare sempre e con facilità, giri l'angolo e trovi subito un caso d'uso che ti complica la vita.
posted @ domenica 23 novembre 2008 01:24