将多个ComboBox绑定到同一个ItemsSource会导致问题。

10

我有两个ComboBoxes,它们的ItemsSource绑定到同一个ObservableCollection

public ObservableCollection<MyType> MyTypeCollection { get; set; }

我定义了两个不同的SelectedItem属性,这些属性又绑定到了正确的ComboBox
public MyType MySelectedItem1 { get; set; }
public MyType MySelectedItem2 { get; set; }

每当我在其中一个ComboBox中选择一个项目时,我的类中定义的两个SelectedItem属性都会设置为该选择。这两个ComboBox也在视觉上设置为该值。
为什么会这样?
我尝试了几种方法,例如Mode = OneWay等,但它们都不起作用。
以下是我精简后的XAML(用于问题):
<ComboBox SelectedItem="{Binding MySelectedItem1}"
          ItemsSource="{Binding MyTypeCollection, Mode=OneWay}"/>

<ComboBox SelectedItem="{Binding MySelectedItem2}"
          ItemsSource="{Binding MyTypeCollection, Mode=OneWay}"/>

3
你的帖子说你的Xaml被“删减”了。原始版本是否巧合地在组合框上有 IsSynchronizedWithCurrentItem="True"?如果是这样,那就是问题所在。 - Mike Strobel
@MikeStrobel 是的,他们已经被移除了XAML,问题解决了。谢谢! - DeMama
1个回答

15
我猜你在两个 ComboBox 控件上都设置了 IsSynchronizedWithCurrentItem="True"。从两个控件中移除它,这应该可以解决你的问题。
设置 IsSynchronizedWithCurrentItem="True" 告诉 ComboBox 它应该将其 SelectedItem 与底层 ICollectionView 中的 CurrentItem 保持同步。由于你直接绑定到一个集合而不是集合视图,因此两个组合框都使用默认的集合视图,这是跨控件共享的常见实例。当其中一个组合框更新集合视图的选择时,另一个组合框会看到更改并将自己的选择更新为匹配它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接