Почему WPD Datagrid Usercontrol, привязанный к тексту строки данных, не обновляется? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть DataGrid, привязанный через ListCollectionView к ObservableCollection объектов с типом Job, скажем. Каждая ячейка в DataGrid содержит UserControl, который имеет свойство зависимости с именем Job, которое связано с DataGridRow.DataContext (используя Mode = TwoWay). Все отображается правильно.

Проблема в том, что у меня есть фоновый процесс, который изменяет объекты, на которые ссылается объект Job, и те, которые отображаются в UserControl. Очевидно, что Иов не меняется, поэтому вид не меняется. Как я могу получить пользовательские элементы управления в каждой ячейке, чтобы они обновляли себя новыми данными?

1 Ответ

0 голосов
/ 25 октября 2019

В списках есть 3 вида уведомлений об изменениях, о которых вы должны позаботиться:

  • по одному для каждого свойства класса задания.
  • один, если добавляются элементы илиудален из коллекции. Это единственная часть, которую ObservableCollection удаляет.
  • одна часть свойства, представляющая список / CollectionView / что угодно. В ObservableCollection отсутствует функция AddRange, поэтому при больших операциях (например, перестройка списка) она будет спамить пользовательский интерфейс с изменениями. Решение состоит в том, чтобы создать новый список в фоновом режиме, а затем выставить его в этом свойстве.

Одной конкретной проблемой может быть также фоновый процесс, если он является Multi threading . Графический интерфейс пользователя защищен от записи из неправильного потока . Но темы также известны своей способностью проглатывать исключения. Обычно вам нужно написать неисправный Catch, но они делают это бесплатно. В результате вы можете запустить исключение CrossThread и никогда его не заметить.

Для лучшего ответа нам понадобится некоторый код активации. Как и класс работы, BackgroundProcess и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...