2013-03-21 66 views
4

我有一個ComboBox作爲ObservableCollection作爲它的項目源。因此,組合框由標籤組成。涉及消失項目的奇怪問題

我已經得到了一些可以由用戶產生了用戶控件,而這些用戶控件的每個人都可以有許多組合框的。創建UserControl時,帶有UserControl名稱的標籤將添加到ObservableCollection中,因此每個ComboBox的項目源是ObservableCollection,現在都會添加最新的標籤。

一切工作正常,ComboBoxes填充爲新的用戶控件生成,如預期。然而,一個非常奇怪的問題是發生。

當用戶打開一個UserControl的ComboBox下拉菜單時,他可以正確看到所有標籤。

然後,當用戶打開另一個UserControl的ComboBox下拉菜單時,所有項目都以相同的方式顯示。現在奇怪的問題是,當用戶返回到前一個用戶控件的組合框時,項目消失。標籤仍然存在,因爲我已經調試過它並發現標籤仍然包含爲項目,但它就好像它們的高度已被設置爲0(在調試時發現它們的高度不是0,而是26事實)。

同量的標籤都包含,並且在上面的截圖可以看出,它們是可選的,但是不可見的(只是微小的藍色橫條可以看出,以表示它選擇的東西)。我不會在任何地方改變標籤的高度。

用戶已經評論說WPF通過它所代表的集合來緩存CollectionView,這樣所有的ComboBox都共享同一個CollectionView實例。因此,標籤只能有一個可視化父項,所以當用戶擴展第二個組合框時,它會從第一個組合框中分離標籤。

+1

爲什麼downvote? – 2013-03-21 12:46:52

回答

1

這裏是解決方案。 更改您的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> 

我希望這會有所幫助。

+0

感謝您的幫助! – 2013-03-21 13:55:35

+0

不客氣。 – Dilshod 2013-03-21 14:01:55