Привязка к словарю ValueCollection - PullRequest
0 голосов
/ 25 августа 2011

У меня есть словарь, чья ValueCollection состоит из классов, которые отображаются как свойство в моей виртуальной машине и привязаны к DataGrid в пользовательском интерфейсе.Моя проблема в том, что словарь заполняется асинхронно (на самом деле это ObservableDictionary, поэтому я могу отслеживать события изменений), и в сетке не отображаются результаты.Я поднимаю событие PropertyChanged в виртуальной машине для свойства, к которому привязывается DataGrid всякий раз, когда элемент добавляется в словарь, но не может получить никаких результатов.Я проверил, что события запускаются.

Если я использую прямую ObservableCollection вместо ObservableDictionary, все в порядке, и мне даже не нужно поднимать PropertyChanged, но я действительно хотел использовать Dictionary для хранениямоя коллекция для хранения уникального ключа в каждой записи.

Я делаю что-то не так или есть обходной путь с другой коллекцией, которую я мог бы использовать?Я также попытался вызвать .ToObservable () или .ToEnumerable () для коллекции значений для привязки.

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Проблема была решена возвращением Dictionary.Values.ToList () в моей виртуальной машине вместо просто .Values, .Values.GetEnumerator () или .Values.ToObservable (). Мне все равно пришлось вызывать PropertyChanged в моей виртуальной машине, чтобы свойство виртуальной машины возвращало список.

0 голосов
/ 25 августа 2011

Проблема в том, что ваш ObservableDictionary, вероятно, реализует INotifyCOllectionChanged (хорошо), а ваш ObservableDictionary.Values ​​- нет.

Переопределите неуниверсальный метод IEnumerable.GetEnumerator в своем словаре, чтобы он возвращал только значения вместо KeyValuePairs и привязывал словарь к вашей сетке.

...