Combo-box loses selection after collection changes
基本的に、私はのObservableCollectionクラスにバインドされたWPFのコンボボックスを持っています。このクラスには、データベースの新しいスナップショットを取得するためのクリアやリフィルなど、いくつかの変更を行う必要がある場合、コレクションの変更通知を遅らせる追加の機能があります。
私のコンボボックスのバインディングには、DisplayMemberPathとSelectedValuePathの両方が設定されています。 SelectedValuePathは整数プロパティに解決されます。
問題は、参照質問、私はバインドされたコレクション内の値を更新すると、バウンドコンボボックスはその選択を失い、そして(SelectedIndexを= -1)ブランクになると同じです。
私はて、CollectionChangedイベントは、コレクションが再投入されるまで焼成し、バックその中のアイテムを持っていませんことを確認することができます。
もっと不可解な、私は次の操作を行う場合は次のとおりです。
using (_collection.DelayNotifications())
{
var items = _collection.ToArray();
_collection.Clear();
_collection.AddRange(items);
}
コンボボックスがないは、その選択された値を失いません。
これは、コレクション内のアイテムがデータベースから取得された新しいアイテムで置き換えられた場合に破損することを示唆しています - SelectedValuePathバインディングを使用していない場合でも受け入れることができます。同じ、確かに私がやっていることはうまくいくはずですか?
私は誰もが任意のアイデアを持って、.NET 3.5 SP1
を使用していますか?
編集以下のコメントから
とBLAMの答え。私はそれらが理由であることを承諾するなぜそれをやっている。しかし、それは本当に私を助けません。
私は、ビューモデルのIntegerプロパティにComboboxのSelectedValueプロパティをバインドしています。 SelectedItemをバインドする場合、ビューモデルでそのオブジェクトタイプのプロパティにバインドする必要がありますが、実際にはそれは整数プロパティです。私は「固定」しまし瞬間
にバインドされているプロパティ「SelectedValueの」のプロパティ変更イベントを強制することにより、問題を(マイナーなハックを読みます)。これは、定義されたSelectedValuePathに一致する項目の内部リストをComboboxに再チェックさせるようです。 WPFコンボボックスは、「知っている」必要がありますは、それゆえ私はそれがそのアイテムのマッチングロジックを調整するだろうと仮定し、その遠く飛躍のとは思わない、SelectedValuePath値が設定されています。しかし、これはSOが意図している範囲外です。
私はおそらくこれを受け入れるつもりであることを理解していますが、これはWPFの仕組みですが、WinFormsのデータバインドされたコンボボックスと数年戦った後、WPFを使う必要はありません。 WPFコンボボックスはWinFormよりはるかに優れていると言っていますが。
ValuePathは別のオブジェクトであれば問題ありません...特定のインシュランス(オブジェクト)にバインドされているため、バインディングが保持されることは期待できません。それらを削除すると、バインディングは失われます。 – UIlrvnd
DelayNotificatons()によって返されたオブジェクトの処理方法は、ListResetフラグを指定してCollectionChangeイベントを発生させます。私はまだコンボボックスを見て、それが一致する整数値の新しいリストを見ていると思います...もし何が起こっていなければ、私のオプションは何ですか? – Marlon
コード例では、操作するのはコレクションだけなので、同じインスタンスを使用します。 **同じ値を持っていても整数が別のインスタンスであるので見えません...それが意味を持つことを願っています... – UIlrvnd