2011-08-25 3 views
0

ValueCollection이 내 VM에서 속성으로 공개되고 UI의 DataGrid에 바인딩 된 클래스로 구성된 Dictionary가 있습니다. 내 문제는 사전에 비동기 적으로 채워진다는 것입니다 (실제로 ObservableDictionary이므로 변경 이벤트를 모니터링 할 수 있습니다). 결과가 그리드에 표시되지 않습니다. DataGrid가 사전에 항목이 추가 될 때마다 바인딩되는 속성에 대해 VM에서 PropertyChanged 이벤트를 발생시키고 있지만 결과를 얻을 수 없습니다. 나는 그 사건이 발포했음을 확인했다.Dictionary에 바인딩하기 ValueCollection

ObservableDictionary 대신 직선 ObservableCollection을 사용하면 모든 것이 정상이며 PropertyChanged를 올릴 필요가 없습니다.하지만 각 항목에 고유 키를 보관하기 위해 사전을 사용하여 내 컬렉션을 유지하려고합니다.

내가 잘못하고있는 것이거나 사용할 수있는 다른 컬렉션을 사용하여 해결 방법이 있습니까? 또한 바인딩을 위해 값 컬렉션에서 .ToObservable() 또는 .ToEnumerable()을 호출 해 보았습니다.

답변

0

문제는 .Values, .Values.GetEnumerator() 또는 .Values.ToObservable() 대신 내 VM에서 Dictionary.Values.ToList()를 반환하면 해결됩니다. 나는 여전히 목록을 반환하는 VM 속성에 대해 내 VM에서 PropertyChanged를 발생시켜야했습니다.

0

문제는 귀하의 ObservableDictionary가 아마도 INotifyCOllectionChanged (양호)를 구현하지만 ObservableDictionary.Values는 그렇지 않다는 것입니다.

사전에없는 일반 IEnumerable.GetEnumerator 메서드를 재정 의하여 KeyValuePairs 대신 값만 반환하고 사전을 눈금에 바인딩합니다.

+0

[Dr.WPF] (http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol-to-a-dictionary/)에서 제공하는 ObservableDictionary를 사용하고 있습니다.). Values에 대한 PropertyChanged 이벤트를 발생시키고 실제로 발생했음을 확인했습니다. 그래도 나는 당신의 생각을 한 발 맞춰서 어떤 일이 일어나는지 보게 될 것입니다. – Random