これをできるだけ簡潔に説明しようと思います。2 つのオブジェクトがあります。1 つ目は Id プロパティを持つオブジェクト A と呼び、2 つ目は ParentId プロパティを持つオブジェクト B と呼びます。明らかな関係は、オブジェクト B の ParentId がオブジェクト A の Id プロパティに設定されていることです。私は MVVM パターンを使用しているので、viewmodel には 2 つの ObservableCollections があり、1 つはオブジェクト A と他のオブジェクト B を含みます。viewmodel の構築時に、ListItems という名前の ObservableCollection<'A'> を作成して入力します。私のxamlはシンプルです、
<StackPanel>
<ListBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ListItems}">
</ListBox>
<ComboBox SelectedValuePath="ParentId" SelectedValue="{Binding Path=ListItems/Id, Mode=OneWay}" ItemsSource="{Binding ComboItems}">
</ComboBox>
<Button Click="Button_Click" Content="Push Me"/>
</StackPanel>
ご覧のとおり、コンボボックスの SelectedValue は ListItems の現在のアイテムの Id プロパティにバインドされています。したがって、基本的にリストボックスとコンボボックスはマスター詳細にあります。
ボタンを押すと、ObservableCollection<'B'> という名前の ComboItems が入力され、コンボボックスに入力されます。ここから奇妙さが始まります。プログラムを起動すると、ボタンを押すだけで、あとでリストボックス内の項目を選択すると、SelectedValue バインディングにより、コンボボックスが適切に項目を選択します。しかし、プログラムを起動して最初にリストボックス内の項目を選択してからボタンを押すと、現在のコンボボックス項目は現在のリストボックス項目で変更されません。バインディングは永久に壊れているようです。なぜこれが起こるのか誰か知っていますか?
Ps。SelectedValue/SelectedValuePath を設定する前にコンボボックスに ItemsSource を設定すると、マスター/詳細バインディングは機能しません。xamlには順序があることは知っていますが、それは少し壊れやすいようです。誰かがそれについても意見を持っているなら、私はすべて耳を傾けています。
ありがとう、ネイト
編集 -
SelectedValue をバインドする場合、非常に脆弱です。バインドが機能している場合、つまり、リスト ボックスで何も選択せずにコンボ ボックスを埋めた場合、コンボ ボックスでアイテムを選択すると、バインドが壊れます。これで多くの時間を無駄にした後、SelectedItem をバインドすることにしました。このバインディングは、以前に指定したどの条件でも壊れません。ただし、 SelectedValue バインディングが非常にばかげている理由については、どんな回答でも構いません。回答した、または回答する予定のすべての人にもう一度感謝します。