以前の長い投稿でごめんなさい。これが私の簡潔な(!)説明です。
コレクションビューをitemsSourceとしてコンボボックスにバインドし、そのselectedvalueをビューモデルのプロパティにバインドします。IsSynchronizedWithCurrentItem="False"を保持する必要があります。
ビューのソースリストを変更してから、ビューを更新します。変更された(追加、削除、編集された)アイテムは、コンボのアイテムリストに正しく表示されます。しかし、問題は選択したアイテムにあります。コンボのdisplaymemberパスでもあるプロパティを変更すると、変更されたプロパティ値がコンボの選択ボックスに反映されません。コンボドロップダウンを開くと、アイテムリストには正しく表示されますが、選択ボックスには表示されません。
XAMLでコンボボックスタグをリストボックスに変更すると(すべての属性はそのまま)、選択したアイテムのdisplaymemberプロパティ値が更新されると、変更はリストボックスの選択したアイテムに反映されます。
なぜこの問題ですか?
参考までに:
私のビューモデルには、ItemsSourceおよびSelectedValuerespとしてコンボにバインドされたプロパティEmployeeCollectionViewおよびSelectedEmployeeIdがあります。このVMは、INotifyPropertyChangedインターフェイスを実装します。
私のコア従業員クラス(そのリストはEmployeeCollectionViewのソースです)は、INotifyPropertyChangedのない単なるModelクラスです。
DisplayMemberPathは、employeeModelクラスの「Name」プロパティです。私はこれを何らかの方法で変更し、コンボ選択ボックスが値を更新することを期待しています。
SelectedEmployeeIdを0(itemsSourceからダミーの「-Select All-」従業員エントリを正しく選択する場所)に設定し、古い選択値を元に戻して更新してみました。しかし、役に立たない。古い値は私を古いラベルに戻します。ただし、アイテムコレクションには最新のエントリがあります。
ビューを更新する前にコンボボックスのIsEditable=Trueを作成し、更新後にIsEditable = Falseを作成すると、正常に動作します。
ただし、これはパッチであり、不要です。
どうも
Vinit Sankhe