WPFでのデータバインディングの基本を理解するのに問題があります。読み込みごとに異なる列名を持つDataTableにバインドされた汎用DataGrid(AutoGenerateColumnsが設定されている)があります。dataTableにブール型の列が含まれている場合、trueとfalseを表すカスタム画像を含む列をレンダリングしたいと思います。
これを実現するために、celltemplateのページでStaticResourceを宣言し、AutoGenerateColumnイベントをトラップしてこのテンプレートを使用するc#コードを作成しました。
<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#コード:
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;
}
}
DataTrigger Bindingプロパティがめちゃくちゃになっていることを除いて、これはほとんど機能します。列の値が「false」の場合は検出されないため、nocheck.png画像は表示されません。列のデータバインドされた値を参照するようにBindingプロパティを作成する方法がわかりません(列名は毎回異なるため、バインディングのPath部分に列名をハードコーディングすることはできません) 。
列の値を取得するためにBindingプロパティがどのように表示されるかを誰かに教えてもらえますか?