2013-07-04 9 views
11

Scheint, dass ich eine Wand getroffen habe, die versucht, DataTemplates auf meinem DataGrid zu verwenden. Was ich versuche, ist, eine Vorlage zu verwenden, um zwei Zeilen Text für jede Zelle anzuzeigen. Aber es scheint nicht möglich zu sein, die Kolumne irgendwie zu binden.Binding DataGridTemplateColumn

Der folgende Code zeigt hoffentlich, was ich tun möchte. Beachten Sie die Bindung für jede Spalte: es gibt keine solche Sache für eine Template-Spalte, und als solche könnte dieser XAML möglicherweise nicht funktionieren.

Bin ich gezwungen, das gesamte DataTemplate in jede Spalte zu kopieren, nur um eine unterschiedliche Bindung für jede Kopie zu haben? Sicherlich gibt es eine schöne Möglichkeit, dies zu umgehen? Oder verpasse ich gerade etwas, das wieder offensichtlich ist?

+0

"Oder fehlt mir gerade etwas, das wieder offensichtlich ist?" - Wir waren alle dort, vor allem mit WPF. –

Antwort

4

Ich bin mir nicht ganz sicher, was Sie tun möchten, aber wenn Sie den DataContext der ganzen Zeile benötigen, können Sie eine RelativeSource Bindung verwenden, um den visuellen Baum zu durchlaufen. Gefällt mir so:

<DataTemplate x:Key="DoubleField"> 
    <StackPanel> 
     <TextBlock Text="{Binding DataContext.Value1, RelativeSource={RelativeSource AncestorType=DataGridRow}}"/> 
     <TextBlock Text="{Binding DataContext.Value2, RelativeSource={RelativeSource AncestorType=DataGridRow}}"/> 
    </StackPanel> 
</DataTemplate> 
+1

Das Problem ist das Fehlen der Bindungsmöglichkeit, wenn ich eine Templatecolumn definiere. Es scheint keine Möglichkeit für mich zu geben zu sagen, dass die erste Spalte das Feld Titel zur Vorlage geben soll. –

+0

Die Datentabelle der Vorlagenspalte wird bereits mit dem Datenkontext der Zeile geliefert. – Gman