2016-04-29 68 views
0

MSDN「ComboBoxItem的內聯集」說:在DataGridComboBoxColumn

要填充的下拉列表中,首先爲 組合框ItemsSource屬性通過使用下列選項之一:

  • 靜態資源。有關更多信息,請參閱StaticResource標記擴展。
  • x:靜態代碼實體。有關更多信息,請參見x:靜態標記擴展。
  • ComboBoxItem類型的內聯集合。

隨着 「ComboBoxItem類型的內聯集」 我想過這樣的事情:

<DataGrid> 
    <DataGrid.Columns> 
    <DataGridComboBoxColumn> 
     <ComboBoxItem Content="None" Tag="0" /> 
     <ComboBoxItem Content="Few" Tag="1" /> 
     <ComboBoxItem Content="Some" Tag="2" /> 
     <ComboBoxItem Content="Enough" Tag="3" /> 
     <ComboBoxItem Content="Lots" Tag="4" /> 
     <ComboBoxItem Content="Too much" Tag="5" /> 
    </DataGridComboBoxColumn> 
</DataGrid.Columns> 
</DataGrid> 

但它沒有工作。我知道另一種方法來填充DataGridComboBoxColumn,但我很好奇,這是因爲我在我的研究中沒有發現任何內容......那麼,什麼意思是「內嵌ComboBoxItem類型的集合」呢?

回答

1

這裏關鍵的是DataGridComboBoxColumn不是ComboBox而引用的文檔片段不適用。

的原因,爲什麼你不能在列定義添加ComboBoxItem元素,我認爲,這會對它們添加到可視化樹多次(在填充每個ComboBox這些項目的問題將得到「重用」,而比克隆)。

據我所知,DataGridComboBoxColumn只是一個列定義,它暴露了幾個ComboBox屬性,並且默認顯示爲ComboBox。我的觀點是,沒有額外的功能可以通過DataGridTemplateColumn無法實現。

這裏是一個另類採取的是應該讓你開始:

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox> 
         <ComboBoxItem Content="None" Tag="0" /> 
         <ComboBoxItem Content="Few" Tag="1" /> 
         <ComboBoxItem Content="Some" Tag="2" /> 
         <ComboBoxItem Content="Enough" Tag="3" /> 
         <ComboBoxItem Content="Lots" Tag="4" /> 
         <ComboBoxItem Content="Too much" Tag="5" /> 
        </ComboBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

與之相對以前的方案這一次的作品,因爲ComboBoxItem元件在DataTemplate中定義,這意味着XAML處理器實際上是將它們轉換成FrameworkElementFactory對象,而這些對象又能夠按需產生模板化的元素ComboBoxItem