2014-11-14 54 views
0

我有一個奇怪的問題,因爲在組合框樣式中,當我使virutalzation爲true時,我有一個選中的組合框檢查組合框項目中的所有複選框。Combobox虛擬化問題

在ItemsPanel財產,我已經和VirtualizingStackPanel一些自定義樣式,如下

<Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
      <VirtualizingStackPanel IsItemsHost="True" 
            IsVirtualizing="True" 
            VirtualizationMode="Recycling" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
     </Setter> 

但在此之前和滾動視圖後,它的不同。

對於例如,在這裏,我嘗試向下滾動項目面板

ComboBoxItem cmbItem = ComboBox1.ItemContainerGenerator.ContainerFromItem(ComboBox1.Items[0]) as ComboBoxItem; 

後獲得組合框的第一個項目,但我什麼也沒有,但這裏NULL。

那麼無論如何,我們可以實現這個使用virutalization? (我知道它已經在虛擬化!)。或者我們應該擺脫虛擬化,並考慮另一種解決方案。我們看到沒有虛擬化屬性的組合框加載非常緩慢。

有什麼想法?

在此先感謝! :)

+0

爲什麼要訪問第一個(或特定的)ComboBoxItem?也許我們在這裏有另一種方法。在虛擬化模式下,您想要獲取的項目實際上可能不存在(不可見,未加載)。所以你必須處理一些回調/事件。 –

+0

我的第一個組合框項目是'全選'複選框,因爲當我檢查它時,所有組合框項目都將被檢查。正如你所說的那樣處理一些回調/事件,我認爲這會在代碼中額外的開銷。 –

+0

如果你想檢查所有的複選框,只需修改***數據項***,每個CheckBox應該對應數據項的一些基礎布爾屬性。 –

回答

0

NULL直接是虛擬化的結果。它是虛擬化/回收的ComboBoxItem實例。只有來自集合的可見項目纔會分配ComboBoxItem,因此如果您在任何不可見的項目上詢問ComboBoxItem,您將返回NULL。