Я только начинаю с MVVM и натолкнулся на препятствие, с которым, я надеюсь, кто-то может мне помочь. Я пытаюсь создать простой вид с 2 списками. Выбор из первого списка будет заполнять второй список. У меня создан класс, в котором хранится информация, к которой я хочу привязаться.
MyObject Class (Observable Object - это просто базовый класс, который реализует 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>();
}
}
В моей модели представления у меня создано две коллекции ObservableCollections
public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }
В моем конструкторе ViewModel у меня есть:
this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level1MenuItems = LoadEMSMenuItems("Sample.Xml");
Это прекрасно работает для предметов уровня 1, и они правильно отображаются в представлении. Однако у меня есть команда, которая вызывается, когда пользователь щелкает элемент в списке, который имеет следующее:
Level2MenuItems = ClickedItem.SubCategories;
По какой-то причине это не обновляет интерфейс второго списка. Если я поставлю точку останова в этом месте, я увижу, что в Level2MenuItems хранится правильная информация. Если я напишу цикл foreach и добавлю их по отдельности в коллекцию Level2MenuItems, он будет отображаться правильно.
Также в качестве теста я добавил следующее в конструктор:
Level2MenuItems = Level1MenuItems[0].SubCategories;
И это обновлено правильно.
Так почему же код работает так, как ожидалось, в конструкторе или при циклическом переходе, но не тогда, когда пользователь нажимает на элемент в списке?