ObservableCollection não atualiza o View
Estou apenas começando com o MVVM e encontrei um obstáculo que espero que alguém possa me ajudar. Estou tentando criar uma exibição simples com 2 caixas de listagem. Uma seleção da primeira caixa de listagem preencherá a segunda caixa de listagem. Eu tenho uma classe criada que armazena as informações que eu quero vincular.
MyObject Class (Observable Object é apenas uma classe 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>();
}
}
No meu viewmodel, tenho duas ObservableCollections criadas
public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }
No meu construtor do ViewModel eu tenho:
this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level1MenuItems = LoadEMSMenuItems("Sample.Xml");
Isso funciona bem para os itens de Nível 1 e eles são exibidos corretamente na Visualização. No entanto, tenho um comando que é chamado quando o usuário clica em um item na caixa de listagem, que possui o seguinte:
Level2MenuItems = ClickedItem.SubCategories;
Por algum motivo, isso não atualiza a interface do usuário da segunda caixa de listagem. Se eu colocar um ponto de interrupção nesse local, posso ver que o Level2MenuItems possui as informações corretas armazenadas. Se eu escrever um loop foreach e adicioná-lo individualmente à coleção Level2MenuItems, ele será exibido corretament
Também como teste, adicionei o seguinte ao construtor:
Level2MenuItems = Level1MenuItems[0].SubCategories;
E isso foi atualizado corretament
Então, por que o código funcionaria conforme o esperado no construtor ou durante o loop, mas não quando um usuário clica em um item na caixa de listage