我将尝试尽可能简洁地解释这一点。我有 2 个对象,第一个我们称之为对象 A,它有一个 Id 属性,第二个我们称之为对象 B,它有一个 ParentId 属性。明显的关系是对象 B 的 ParentId 设置为对象 A 的 Id 属性。我正在使用 MVVM 模式,因此在视图模型上我有 2 个 ObservableCollections,一个包含对象 A 和其他对象 B。在构建视图模型时,我创建并填充名为 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 绑定,组合框将正确选择一个项目。但是如果我启动程序并首先在列表框中选择一个项目然后按下按钮,则当前组合框项目不会随着当前列表框项目而改变。绑定似乎永远被打破了。有谁知道为什么会这样?
附言。如果我在设置 SelectedValue/SelectedValuePath 之前在组合框上设置了 ItemsSource,则主/从绑定将永远无法工作。我知道 xaml 有顺序,但这似乎有点脆弱。因此,如果有人对此也有意见,我会全神贯注。
谢谢,内特
编辑 -
绑定 SelectedValue 时,非常脆弱。如果绑定有效,即没有在列表框中选择任何内容然后填充组合框,如果您在组合框中选择了一个项目,则绑定将中断。在为此浪费了很多时间之后,我选择了绑定 SelectedItem。在我之前指定的任何条件下,此绑定都不会中断。但是,对于为什么 SelectedValue 绑定如此荒谬,我会接受任何答案。再次感谢所有已回答或将要回答的人。