[WPF] Come litigare con INotifyPropertyChanged e vivere felici

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.

DataLogger 

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.

«novembre»
domlunmarmergiovensab
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456