Обновление свойства элемента источника элемента управления, не отраженное в экземпляре шаблона itempanel элемента управления - PullRequest
0 голосов
/ 04 марта 2011

У меня есть пользовательский элемент управления панели, который предназначен для использования в качестве элемента панели элементов в элементе управления.

Itemscontrol будет связан с источником данных.

Этот источник данных является списком, а каждый элемент списка является настраиваемым бизнес-объектом. В приложении пользователь может обновить каждый из этих бизнес-объектов в списке, и при этом запускается уведомление об изменении свойства, как и ожидалось.

Теперь моя проблема здесь:

Когда пользователь обновляет свойства объекта в источнике данных (itms в списке), к которому привязан элемент управления, мой пользовательский элемент управления панели не может получить это уведомление, поэтому в результате элемент управления элемента не обновляться с обновленными элементами в его представлении.

Я попытался использовать ObservableCollection вместо List - проблема все та же.

Я, должно быть, упускаю что-то фундаментальное здесь ... пожалуйста, помогите с любыми указателями, ответами или решением.

1 Ответ

0 голосов
/ 04 марта 2011

Уведомление об изменении в коллекции немного сложнее. Скажем, у вас есть коллекция продуктов. Вы можете реализовать уведомление об изменениях в трех разных местах.

  1. Уведомление об изменении в классе Product (реализация INotifyPropertyChanged в class Product)
  2. Изменить уведомление в самой коллекции (т. Е. Используя ObservableCollection)
  3. Уведомление об изменении в классе, который содержит коллекцию, то есть реализующую INotifyPropertyChanged в классе, который содержит коллекцию. (обычно это ViewModel под MVVM)

Эти древовидные пути не одинаковы, и каждый из них предназначен для отдельной ситуации.

Допустим, что коллекция ObservableCollection<Product> Products {get;set;} если вы хотите, чтобы изменения в продукте регистрировались (т. е. если вы делаете что-то вроде Products[0].Name = "New Product";, тогда # 1 - правильный.

Если вы хотите сделать Products.Add(new Product(...)), тогда номер 2 - правильный.

Если вы хотите сделать Products = new ObservableCollection<Product>(), тогда # 3 будет правильным. Это особенно сложно, так как я не изменяю коллекцию, а создаю новую , поэтому ObservableCollection не поможет - мне нужно реализовать INPC в содержащем классе.

...