Estoy empezando con MVVM y he tropezado con un obstáculo que espero que alguien pueda ayudarme. Estoy tratando de crear una vista simple con 2 listboxes. Una selección del primer cuadro de lista completará el segundo cuadro de lista. Tengo una clase creada que almacena la información que quiero vincular.ObservableCollection no se actualiza View
MiObjeto clase (objeto observable es sólo una clase base que 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>();
}
}
En mi modelo de vista tengo dos ObservableCollections crearon
public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }
En mi constructor del modelo de vista que tengo:
this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level1MenuItems = LoadEMSMenuItems("Sample.Xml");
Eso funciona bien para los artículos de nivel 1 y se muestran correctamente en la Vista. Sin embargo tengo un comando que se llama cuando el usuario hace clic en un elemento del cuadro de lista, que tiene la siguiente:
Level2MenuItems = ClickedItem.SubCategories;
Por alguna razón esto no actualizar la interfaz de usuario del segundo cuadro de lista. Si pongo un punto de interrupción en esta ubicación, puedo ver que Level2MenuItems tiene la información correcta almacenada en él. Si escribo un ciclo foreach y los agrego individualmente a la colección Level2MenuItems, se muestra correctamente.
también como una prueba de que añade el siguiente al constructor:
Level2MenuItems = Level1MenuItems[0].SubCategories;
Y eso actualizado correctamente.
Entonces, ¿por qué el código funcionaría como se esperaba en el constructor, o cuando se realiza un bucle, pero no cuando un usuario hace clic en un elemento en el cuadro de lista?
Gracias. Exactamente lo que necesitaba. –