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