CompositeCollection を使用して元の ItemsSource を追加のオブジェクトと「マージ」する ComboBox から派生したカスタム コントロールがあります。
問題はそれです
CompositeCollection comp = new CompositeCollection();
SomeLogic();
ItemsSource = comp;
構成された Collection に ItemsSource を設定すると、SelectedItem が null に設定され、ViewModel への Binding TwoWay Binding が呼び出されます。ViewModel の SelectedItem バインド プロパティは「null」になります。
現在、ItemsSource を割り当てた後に SelectedItem を復元することで、これを回避しています。
Object priorSelectedItem = SelectedItem;
ItemsSource = comp;
SelectedItem = priorSelectedItem;
ただし、これは ViewModel の SelectedItem の値を修正するだけです。厄介な副作用は、オブジェクトが変更されたときに、いくつかのロジックがセッターで実行されることです。EGセッティングa
_dataHasChanged = true;
国旗。
だから何か方法があれば
a)ItemsSourceの変更中にSelectedItemがリセットされるのを防ぎます
また
b) ItemsSource の変更中に SelectedItem-Binding が呼び出されないようにする
カスタムコントロール内から(コントロールに欠陥があるため、20個のViewModelを処理したくありません)その方法についてのご意見をお待ちしております:-)