涉及消失项目的奇怪问题

我有一个作为ObservableCollection项目源的combobox。 因此,combobox由标签组成。

我有一些UserControls可以由用户产生,每个这些UserControls可以有多个ComboBoxes。 当UserControl被创build时,一个带有UserControl名字的标签被添加到ObservableCollection中,因此每一个Item源是ObservableCollection的ComboBox现在都会添加最新的标签。

一切工作正常,并且ComboBoxes被填充为新的用户控件产生,如预期。 然而,一个非常奇怪的问题是发生。

当用户打开一个用户控件的combobox下拉菜单时,他可以正确地看到所有的标签。

然后,当用户打开另一个用户控件的combobox下拉菜单时,所有项目都以相同的方式显示。 现在奇怪的问题是,当用户回到以前的用户控件的combobox,项目消失。 标签仍然存在,因为我已经debugging了它,发现标签仍然作为项目被包含,但是就好像它们的高度被设置为0(在debugging时发现它们的高度不是0,而是26事实)。

包含相同数量的标签,从上面的屏幕截图可以看出,它们是可select的,但是不可见(只有那个小小的蓝色条可以显示它正在select某个东西)。 我不会在任何地方改变标签的高度。

一个用户已经评论说WPF通过它所代表的集合来cachingCollectionView,所以所有的ComboBox都共享同一个CollectionView的实例。 因此,一个标签可以只有一个可视化父项,所以当用户展开第二个combobox时,它将从第一个标签中分离出标签。

这是解决方案。 像这样改变你的ComboBox并将你的ObservableCollection<T>绑定到ComboBox 。 请注意,您应该将ObservableCollection<Label>更改为ObservableCollection<string>

 <ComboBox x:Name="cmb1" Height="24" Margin="0,27,0,0" VerticalAlignment="Top" Width="131"> <ComboBox.ItemTemplate> <DataTemplate> <Label Content="{Binding}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> 

我希望这有帮助。