Надеюсь, кто-то может помочь мне с этим. Я создаю приложение Silverlight, которое используется для редактирования изображений. У пользователя есть проект, который содержит слои, содержащие элементы. (Элементы представляют собой элементы текста и изображения).Связывание данных Silverlight с коллекцией в коллекции
У меня есть класс, который представляет проект. Он содержит ObservableCollection<Layer>
, и каждый слой имеет ObservableCollection<Element>
. Элемент - абстрактный класс. Существует класс TextElement и ImageElement, который наследует от Element.
Моя проблема заключается в том, что пользовательский интерфейс никогда не обновляется при изменении элемента внутри коллекции. Я использую INotifyPropertyChanged для всех своих свойств, и я собираю CollectionChanged в коллекциях, но все равно не хожу. Событие CollectionChanged для ObservableCollection<Element>
никогда не попадает в обновление одного из его элементов.
Это код, который я первоначально имел:
void Elements_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { this.NotifyChange("Elements"); }
Если кто-нибудь может помочь я был бы очень благодарен.
Спасибо за ваш совет, но проблема в том, что событие elementCollection.CollectionChanged никогда не срабатывает. Свойства элементов обновляются, но коллекция, содержащая Элементы, не работает. – Matthew
CollectionChanged не будет запущен, когда свойства элементов будут изменены, но будет _will_ fire, когда элементы будут добавлены в коллекцию. Таким образом, используя вышеприведенный код, вы уже подписались на элемент PropertyChanged из элемента, когда он был добавлен в коллекцию, - и позже, когда свойство этого элемента изменится, CollectionChanged не будет срабатывать, но PropertyChanged элемента будет срабатывать и Будет запущен метод ElementChanged. –
Я не уверен, что понимаю. Я реализовал код выше, но он работает только при добавлении элемента. Есть ли способ, которым я могу обновить пользовательский интерфейс, поскольку я изменяю свойство, например. Element.Name? – Matthew