Diciamo in qualche astratto ViewModel classe base ho una proprietà plain-old come segue:Change Notification in MVVM gerarchie
public Size Size
{
get { return _size; }
set
{
_size = value;
OnPropertyChanged("Size");
}
}
Ho quindi creare una più specifica ViewModel, che eredita dalla precedente, che contiene la seguente proprietà:
public Rect Rectangle
{
get { return new Rect(0, 0, _size.Width, _size.Height); }
}
Ora, in qualche View classe I legano alla proprietà il già citato del ViewModel Rectangle
. Tutto funziona bene, fino a quando non cambio le dimensioni. Quando le modifiche di Size
, Rectangle
non lo sanno e la modifica non si propaga alla vista. E poiché Rectangle
si trova nella classe figlia, non è possibile semplicemente aggiungere uno OnPropertyChanged("Rectangle")
al setter Size
.
Ora immagino di avere molte proprietà diverse come Rectangle
, che dipendono tutte dalle proprietà di classe base e che nessuna di queste modifiche viene propagata. Ho bisogno di un modo leggero ed elegante per concatenare le notifiche di cambiamento, preferibilmente uno che non richiede molto codice e non mi obbliga a usare le proprietà di dipendenza.
Ovviamente ci sono molte brutte soluzioni qui- quello che sto cercando è qualcosa di pulito e intelligente. Mi sembra che questo sarebbe uno scenario molto comune, e mi sembra che ci possa essere un modo MVVM-friendly per farlo.
Ottima idea. L'ho cambiato un po 'per creare un dizionario in fase di costruzione (per motivi di prestazioni), ma il concetto è valido. – Charlie