Привязка WPF к IDictionary.Values ​​не реагирует на изменения свойств? - PullRequest
0 голосов
/ 21 апреля 2010

Я связываю ListView со свойством, которое по существу оборачивает коллекцию значений (ICollection) в общий словарь.

Когда значения в словаре меняются, я вызываю OnNotifyPropertyChanged (свойство). Я не вижу обновлений на экране, без ошибок привязки.

Когда я изменяю свойство get для возврата словаря расширения Linq.Values.ToList (), без изменения сигнатуры свойства (ICollection) это работает без проблем.

Любая причина, по которой коллекция значений связывается и уведомляется должным образом, не проецируясь на IList <>?

1 Ответ

2 голосов
/ 21 апреля 2010

Вызов OnNotifyPropertyChanged() не совсем корректен в этом случае, так как коллекция все та же, однако элементы в коллекции изменились. Я не знаю точно, как работает код привязки WPF, но он может быстро проверить, изменилась ли ссылка, к которой он привязан, и если нет, не обновит интерфейс.

Причина, по которой ToList() работает, заключается в том, что каждый раз, когда он вызывается, возвращается новый экземпляр List<T>, поэтому при срабатывании OnNotifyPropertyChanged() WPF получает изменения и обновляет все их привязки.

Я не знаю, возможно ли это или нет, но идеальным решением было бы использовать коллекцию для привязок, которая реализует INotifyCollectionChanged . Это будет запускать события, которые контролирует WPF, так что элементы могут быть добавлены, удалены и т. Д. Из пользовательского интерфейса в зависимости от ситуации.

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