questa domanda sta per mostrare la mia mancanza di comprensione del comportamento previsto in sede di attuazione/utilizza INotifyPropertyChanged:Quando si nidificano le proprietà che implementano INotifyPropertyChanged, l'oggetto principale propogate cambia?
La domanda è - per il legame a funzionare come previsto, quando si dispone di una classe che si implementa INotifyPropertyChanged, che ha nidificato proprietà di tipo INotifyPropertyChanged ci si aspetta di iscriversi internamente per modificare la notifica di queste proprietà e quindi propogare le notifiche? Oppure l'infrastruttura vincolante dovrebbe avere la capacità di rendere questo non necessario?
Per esempio (notare che questo codice non è completa - solo scopo di illustrare la questione):
public class Address : INotifyPropertyChanged
{
string m_street
string m_city;
public string Street
{
get { return m_street; }
set
{
m_street = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Street"));
}
}
public string City
{
get { return m_city; }
set
{
m_city = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("City"));
}
}
public class Person : INotifyPropertyChanged
{
Address m_address;
public Address
{
get { return m_address = value; }
set
{
m_address = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Address"));
}
}
}
Quindi, in questo esempio abbiamo un oggetto Indirizzo annidato in un oggetto Person. Entrambi implementano INotifyPropertyChanged in modo che l'alterazione delle loro proprietà comporti la trasmissione di notifiche di modifica delle proprietà ai sottoscrittori.
Ma diciamo che utilizzando l'associazione qualcuno sta sottoscrivendo per modificare la notifica su un oggetto Persona e sta "ascoltando" per le modifiche alla proprietà Indirizzo. Riceveranno notifiche se la proprietà Address stessa cambia (viene assegnato un oggetto Address diverso) ma NON riceverà notifiche se i dati contenuti nell'oggetto di indirizzo nidificato (la città o la strada) vengono modificati.
Questo porta alla domanda: l'infrastruttura di binding è prevista per la gestione di questo problema oppure dovrei sottoscrivere alla mia implementazione di Person per modificare le notifiche sull'oggetto indirizzo e quindi propagarle come modifiche a "Indirizzo"?
Se arrivi a questo punto, grazie per aver dedicato del tempo a leggere questa lunga domanda?
Commento molto apprezzato!
Phil
Ho trovato questa domanda dopo aver cercato su Google. A me sembra che tu debba iscriversi manualmente all'evento PropertyChanged dei bambini e farlo circolare per funzionare con i binding WPF. – loraderon
loraderon, sono abbastanza sicuro che non sia così - almeno nei miei test, che è risultato essere il caso. E, non ci sono informazioni (che ho trovato) per dire altrimenti. Hai qualche link per qualsiasi informazione che puoi fornire su questo? Grazie. Phil – Phil
Non ho alcun collegamento neanche. Nel mio progetto attuale ho dovuto imbastire l'evento PropertyChanged per farlo funzionare. Sono un neofita di WPF e MVVM quindi potrebbe essere solo qualcosa di speciale con il mio progetto. – loraderon