2011-08-25 10 views
0

私はVMのプロパティとして公開され、UIのDataGridにバインドされたクラスで構成されるValueCollectionを持つDictionaryを持っています。私の問題は、ディクショナリに非同期的に(実際にObservableDictionaryなので、私は変更イベントを監視することができます)、その結果が表示されないことです。私は、アイテムがディクショナリに追加されたときにDataGridがバインドされるプロパティのVMのPropertyChangedイベントを発生させていますが、結果を得ることはできません。私はイベントが起こることを確認しました。辞書ValueCollectionへのバインド

ObservableDictionaryの代わりにまっすぐなObservableCollectionを使用すると、すべてが問題なく、PropertyChangedを作成する必要はありませんが、各エントリに固有のキーを保持するためにDictionaryを使用してコレクションを保持することが本当に必要でした。

私は何か間違っているのですか、または私が使用できる別のコレクションの回避策がありますか?また、バインドのために値コレクションで.ToObservable()または.ToEnumerable()を呼び出そうとしました。

答えて

0

問題は、単に.Values、.Values.GetEnumerator()、または.Values.ToObservable()ではなく、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を使用しています。 )。それはValueのPropertyChangedイベントを発生させ、本当に起動することを確認しました。それでも、私はあなたのアイデアに一発を与え、何が起こるかを見てみよう。 – Random

関連する問題