2016-04-29 11 views
0

MSDN sagt:„Eine Inline-Sammlung von ComboBoxItem“ in einem DataGridComboBoxColumn

die Dropdown-Liste zu füllen, zuerst die Itemssource-Eigenschaft für die ComboBox durch eine der folgenden Optionen:

  • Eine statische Ressource. Weitere Informationen finden Sie unter StaticResource-Markuperweiterung.
  • An x: Statische Codeeinheit. Weitere Informationen finden Sie unter x: Static Markup Extension.
  • Eine Inline-Auflistung von ComboBoxItem-Typen.

Mit "Eine Inline-Sammlung von ComboBoxItem Typ" Ich dachte an so etwas wie diese:

<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> 

Aber es hat nicht funktioniert. Ich weiß über andere Methoden, um die DataGridComboBoxColumn zu füllen, aber ich bin neugierig auf das, weil ich nichts darüber in meiner Forschung finde ... Was bedeutet "Inline-Auflistung von ComboBoxItem-Typen" dann?

Antwort

1

Schlüssel Sache hier ist, dass DataGridComboBoxColumn ist kein ComboBox und das genannte Dokumentationsfragment nicht zutrifft.

Der Grund, warum Sie ComboBoxItem Elemente in der Spaltendefinition ist nicht hinzufügen können, glaube ich, dass es das Problem der Zugabe von ihnen zu dem visuellen Baum mehrfach (auf bevölkert jede ComboBox diese Elemente eher würde „wiederverwendet“ darstellen würde als geklont).

Soweit ich weiß, DataGridComboBoxColumn ist nur eine Spalte Definition, die ein paar ComboBox Eigenschaften zur Verfügung stellt und standardmäßig als ComboBox angezeigt wird. Mein Punkt ist, es gibt keine zusätzliche Funktionalität, die nicht mit einem DataGridTemplateColumn erreicht werden kann.

Hier ist eine alternative Einstellung, die bekommen sollten Sie begonnen:

<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> 

Da diese Zeit zur vorherigen Szenario gegen es funktioniert, weil ComboBoxItem Elemente in einem DataTemplate definiert sind, was bedeutet, dass XAML-Prozessor übersetzt sie tatsächlich in eine FrameworkElementFactory Objekte, die wiederum in der Lage sind, Templated ComboBoxItem Elemente auf Abruf zu erzeugen.

Verwandte Themen