Sto facendo esperimenti su una piccola applicazione
Windows Forms che possa implementare in qualche modo il meccanismo tale per cui
l'utente possa annullare le operazioni che fa sui controlli sulla form stessa.
Immaginate di avere un business object di qualsiasi tipo, che espone 5 proprietà
di tipo string. Adesso, immaginate di bindare queste 5 proprietà a
5 TextBox su una Windows Forms.
Ogni volta che l'utente modifica il valore di una TextBox, tale valore viene
catapultato (!) nella proprietà del business object. Fin
qua nulla di particolare. Però ora supponiamo di voler dare all'utente la
possibilità di premere CTRL+Z o dei pulsanti sulla toolbar per tornare indietro,
per annullare qualcosa che ha fatto.
Habitat ideale per il pattern
Command, non c'è che dire. Lavorando strettamente con data
binding (e per adesso senza BindingSource), l'unico modo che ho di intercettare
una modifica ad una proprietà è attraverso il set della
proprietà stessa del business object. Quando passo da questo punto del codice,
creo un oggetto command e lo aggiungo alla history dei command definiti fino a
questo momento.
Questo accade ogni volta che l'utente modifica una
TextBox.
Ma c'è un problema. Quando annullo l'ultima modifica, ripasso comunque
attraverso un set, e questo non va bene. Potrei reimpostare il valore accedendo
al membro privato, ma questo non scatenerebbe l'update dei controlli bindati. Ci
devo ragionare su.
Le risposte che mi sono dato finora sono fondamentalmente due: o applicare in
qualche modo anche il pattern
Proxy, oppure bindare attraverso il BindingSource e
sfruttare alcune caratteristiche che possono tornare utili. In primo piano ad
esempio, vedo gli eventi che intercettano il cambiamento di valore di un
datamember. Ci sto ragionando, mumble mumble!
powered by IMHO 1.3