2017-06-13 47 views
-2
<ComboBox Grid.Row="0" ItemsSource="{Binding Path=optList}" IsSynchronizedWithCurrentItem="False" /> 
<ComboBox Grid.Row="1" ItemsSource="{Binding Path=optList}" IsSynchronizedWithCurrentItem="False" /> 
public ObservableCollection<ComboBoxItem> optList{ get; set; } = new ObservableCollection<ComboBoxItem>() { 
new ComboBoxItem() { Content = "1"}, 
new ComboBoxItem() { Content = "2"} 
} 

当我在组合框之间切换时,一个下拉列表变为空。你知道为什么吗?它正在处理String的集合。两个组合框具有相同的ItemsSource of ObservableCollection <ComboBoxItem>

+0

不要这样做,'ComboBoxItem'的'ObservableCollection'很丑。请阅读有关MVVM的更多信息,以及如何从模型中分离视图。要解决您的错误:请改为使用“ObservableCollection ”。 – dymanoid

+1

我用ObservableCollection 它工作良好 – user3046935

回答

0

ComboBoxItem是一个不能属于多个父母的FrameworkElement。

当您使用字符串集合时,每个ComboBox都会为同一个字符串生成一个新的ComboBoxItem。当集合包含ComboBoxItems时,comboBoxes 不会创建其他ComboBoxItems并重用现有的,从彼此窃取它们。

此外,当您遵循MVVM方法时,您不应该在提供绑定源的视图模型中具有ComboBoxItem对象。

所以字符串收集是一个正确的解决方案。

相关问题