Sto appena iniziando con MVVM e ho raggiunto un ostacolo che spero che qualcuno mi possa aiutare. Sto cercando di creare una semplice vista con 2 listbox. Una selezione dalla prima casella di riepilogo popolerà la seconda casella di riepilogo. Ho creato una classe che memorizza le informazioni che voglio associare.ObservableCollection non si aggiorna Visualizza
MyObject Class (Object osservabile è solo una classe base che implementa INotifyPopertyChanged)
public class MyObject : ObservableObject
{
String _name = String.Empty;
ObservableCollection<MyObject> _subcategories;
public ObservableCollection<MyObject> SubCategories
{
get { return _subcategories; }
set
{
_subcategories = value;
RaisePropertyChanged("SubCategories");
}
}
public String Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
public MyObject()
{
_subcategories = new ObservableCollection<EMSMenuItem>();
}
}
Nel mio ViewModel ho due ObservableCollections creati
public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }
Nel mio costruttore della ViewModel ho:
this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level1MenuItems = LoadEMSMenuItems("Sample.Xml");
Che funziona bene per le voci di Livello1 e vengono visualizzati correttamente nella vista. Tuttavia ho un comando che viene chiamato quando l'utente seleziona un elemento nella casella di riepilogo, che ha la seguente:
Level2MenuItems = ClickedItem.SubCategories;
Per qualche ragione ciò non aggiornare l'interfaccia utente del secondo listbox. Se metto un breakpoint in questa posizione, posso vedere che Level2MenuItems ha le informazioni corrette memorizzate al suo interno. Se scrivo un ciclo foreach e li aggiungo singolarmente alla raccolta Level2MenuItems, viene visualizzato correttamente.
anche come un test ho aggiunto il seguente al costruttore:
Level2MenuItems = Level1MenuItems[0].SubCategories;
E questo aggiornato correttamente.
Quindi, perché il codice funziona come previsto nel costruttore o durante il ciclo, ma non quando un utente fa clic su un elemento nella casella di riepilogo?
Grazie. Esattamente quello di cui avevo bisogno. –