【问题标题】:Two combobox with same ItemsSource of ObservableCollection<ComboBoxItem>两个具有相同 ItemsSource 的 ObservableCollection<ComboBoxItem> 的组合框
【发布时间】:2017-06-13 14:12:49
【问题描述】:
<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"}
}

当我在组合框之间切换时,一个下拉菜单变为空。你知道为什么吗?它正在处理字符串集合。

【问题讨论】:

  • 不要那样做,ObservableCollectionComboBoxItems 是丑陋的。请阅读有关 MVVM 以及如何将视图与模型分离的更多信息。要解决您的错误:请改用ObservableCollection&lt;string&gt;
  • 我使用 ObservableCollection 效果很好

标签: wpf combobox


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2018-01-13
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多