Ich habe ein Problem, die Grundlagen der Datenbindung in WPF zu verstehen. Ich habe ein generisches DataGrid (mit AutoGenerateColumns-Set), das an eine DataTable mit Spaltennamen gebunden ist, die bei jeder Auslastung variieren. Wenn die dataTable Spalten vom Typ boolean enthält, möchte ich eine Spalte rendern, die benutzerdefinierte Bilder enthält, die wahr und falsch darstellen.WPF generisches DataGrid CellTemplate - an Zellwert binden?
Um dies zu erreichen, habe ich ein Static für die Celltemplate auf der Seite erklärt, und ich habe C# Code, der die AutoGenerateColumn Ereignis einfängt und verwendet diese Vorlage:
<DataTemplate x:Key="CheckmarkColumnTemplate">
<Image x:Name="CheckmarkImage" Source="..\..\images\check.png" Height="16" Width="16" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Value="False">
<Setter TargetName="CheckmarkImage" Property="Source" Value="..\..\images\nocheck.png" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
C# -Code:
private void dgData_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(bool))
{
DataGridTemplateColumn col = new DataGridTemplateColumn();
Binding binding = new Binding(e.PropertyName);
col.CellTemplate = (this.Resources["CheckmarkColumnTemplate"] as DataTemplate);
col.Header = e.PropertyName;
e.Column = col;
}
}
Das funktioniert meistens, außer dass ich die DataTrigger Binding-Eigenschaft vermasselt habe. Es erkennt nie, wenn der Wert der Spalte "false" ist, also zeigt es nieocheck.png Bild. Ich weiß nicht, wie man die Binding-Eigenschaft schreibt, so dass sie auf den datengebundenen Wert der Spalte verweist (bedenke, der Spaltenname ist jedes Mal anders, daher kann ich keinen Spaltennamen im Pfad-Teil der Bindung fest codieren) .
Kann mir jemand sagen, wie die Binding-Eigenschaft aussehen sollte, so dass es nur den Wert der Spalte ergreift?
Ich brauche deine Hilfe. Können wir uns im [Chatroom für chinesische Sprache] unterhalten (http://chat.stackexchange.com/rooms/12811/chineses-language)? Bitte erwähne einfach meinen Namen dort. Vielen Dank. (◠‿◠) –