Sto usando una variante del pattern MVC. Nel mio codice GUI, spesso nasce la necessità di sincronizzare "visualizza dati" (ad es. Elemento selezionato) tra diverse viste.
Ad esempio, immaginiamo un programma di disegno vettoriale. Abbiamo due viste: l'immagine e una lista di tutti gli oggetti (rettangoli, quadrati, ...). L'elemento attualmente selezionato dovrebbe rimanere sincronizzato: se fai clic su "Rettangolo A" in ListView, lo stesso rettangolo dovrebbe essere evidenziato nella vista dell'immagine.
Il modo in cui solitamente lo faccio è avere una classe ViewState contenuta nel mio modello. È una buona idea? In caso contrario, quale sarebbe una soluzione migliore?
class VectorDrawing
{
List<Object> Items;
DrawingViewstate Viewstate;
}
class DrawingViewstate
{
Object SelectedItem;
event SelectedItemChanged;
}
class ListviewController
{
ListviewController(VectorDrawing model)
{
model.Viewstate.SelectedItemChanged += ... // Subscribe to event
...
}
}
class ImageViewController
{
... // similar to the ListviewController
}