Список привязки и элементы управления пользовательского интерфейса, не обновляющиеся при редактировании

#c# #wpf #image #controls #bindinglist

#c# #wpf #изображение #элементы управления #список привязок

Вопрос:

Я привязываю список привязок двумя способами к listbox. Список привязки содержит несколько изображений, которые, по-видимому, обновляют список только в том случае, если элементы добавляются или удаляются из списка привязки. Как я могу сделать так, чтобы bindinglist также вызывал событие listchanged при изменении элемента?

РЕДАКТИРОВАТЬ: я нахожу, что проблема, с которой я сталкиваюсь, заключается в том, что свойство объекта не изменяется, а скорее базовый объект.

 BindingList<ImageSource>();
  

Однако это не сработает, если я сделаю это:

 BindingList<Image>();
  

А затем установите путь привязки к изображению.Источник, он будет обновляться правильно, и это связано с тем, что свойство изображения изменилось, но в случае первого примера изменился только прямой элемент в списке. Итак, как я могу получить то же поведение, что и во втором примере?

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Похоже, что использование ObservableCollection вместо BindingList устраняет эту проблему. У меня создалось впечатление, что они были идентичны в уведомлении об изменениях в коллекции. Полный ответ ниже

Ответ №1:

Список вызывает это событие, но только в том случае, если базовые элементы предоставляют надлежащие уведомления через INotifyPropertyChanged .

Комментарии:

1. Я понимаю это, но, похоже, это работает не так, как задумано. Фактическая привязка находится в шаблоне данных следующим образом: <Image Source="{Binding Path=TheImage.Source, Mode=TwoWay}" Stretch="None" /> Насколько я знаю, ImageSource имеет свойство dependency и имеет метод OnPropertyChanged, так почему он не должен работать?

2. @gummy24: Image.Source свойство не является проблемой, тип TheImage должен уведомлять об изменениях в этом случае.

3. Еще одна плохо реализованная вещь в WPF. Я даже вызвал BindingList.ResetItem, а сетка по-прежнему не обновляется.

Ответ №2:

Список привязок отличается от ObservableCollection тем, что список привязок не уведомляет об изменении его прямых элементов (за исключением случаев, когда элементы добавляются или удаляются из коллекции). Однако ObservableCollection реализует интерфейсы INotifyCollectionChanged и INotifyPropertyChanged. Это означает, что о любом изменении прямых элементов ObservableCollection сообщается в пользовательском интерфейсе.

Если вы используете привязки для направления элементов и вам нужно обновлять элементы, а не свойства этих элементов, кажется, что вам нужно использовать ObservableCollection. Другим решением было бы извлечь из BindingList и реализовать INotifyCollectionChanged.

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