Salve,
ho un applicazione strutturata secondo l'architettura MVVM.
questo è il viewModel base che implementa INoifyPropertyChanged:
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public BaseViewModel()
{
}
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Dato un oggetto:
public class persona
{
public string nome{get;set;}
public ObservableCollection<figli> Figli{get;set;}
}
Nel ViewModel ho una variabile di tipo Persona(pers), inizializzata nel costruttore del viewmodel.
Nell'interfaccia utente, il nome è bindato in questo modo.
<textblock text={binding pers.nome}/>
La lista dei figli è bindata in questo modo:
<ItemsControl Width="70" Margin="5,20,0,0" ItemsSource="{Binding pers.figli}">
il binding iniziale funziona correttamente.
poi premendo un pulsante parte un algoritmo che va a modificare l'elenco dei figli.
pers.figli[2].Età = 20;
RaisePropertyChanged("pers.figli");
in questo modo nel momento che l'algoritmo cambia l'età di un figlio la modifica si dovrebbe vedere nell'interfaccia utente, invece non avviene.
mi chiedo se RaisePropertyChanged deve avere il nome di una proprietà singola e non accetti costrutti tipo <oggetto>.<proprietà>
anche eseguendo un RaisePropertyChanged("pers") non avviene l'aggioramento.
Il nome invece viene aggiornato correttamente.