Customize Auto-Generated Columnsへの優れた記事を読んだ後、私は問題に遭遇しました。DataGridコントロールで自動生成された列をカスタマイズする
DataGrid
コントロールで自動生成された列をカスタマイズしようとしているときに、すべての数値の列値が右揃えになっているかのような簡単な操作を行いたいとします。
<DataGrid x:Name="MyGrid" AutoGeneratingColumn="MyGrid_AutoGeneratingColumn">
<DataGrid.Resources>
<DataTemplate x:Key="IntegerTemplate">
<TextBlock Text="{Binding}" HorizontalAlignment="Right"/>
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
を次に、AutoGeneratingColumn
DataGrid
イベントハンドラで、私はすべての整数(つまり、数値)の列のCellTemplate
として、この一般的なDataTemplate
を割り当てる:次のようにこの目的を達成するために、私はDataTemplate
を作成しました
public void MyWindow_AdjustColumnTemplateBasedOnType(
DataGridAutoGeneratingColumnEventArgs e)
{
if (/*This is a column I want to change*/)
{
DataGridTemplateColumn column=new DataGridTemplateColumn();
column.Header=e.PropertyName;
column.CellTemplate=MyGrid.FindResource("IntegerTemplate") as DataTemplate;
e.Column=column;
}
}
TextBlock
のText
列の値が望ましい結果を表示しないという問題があります。代わりに、列のCellTemplate
としてこのDataTemplate
を持つ各セルの右詰めで値を見て、私は次を参照してください。"{Binding}"
に属性Text
を設定することにより、空のバインディング構文を使用して
は明らかに間違っています。パスベースのバインディングを設定すると、望ましい結果が得られます。私は(ハードコーディングされたデータ・パス)を設定した場合、それはのようなものを使用して結合、次のとおりです。
<DataGrid.Resources>
<DataTemplate x:Key="IntegerTemplate">
<!-- Binding hard set to ProductId -->
<TextBlock Text="{Binding ProductId}" HorizontalAlignment="Right"/>
</DataTemplate>
</DataGrid.Resources>
はその後、すべてがうまくありませんが、私の一般的なDataTemplate
はもはや一般的なもので。代わりに、それはすべての整数の列のための再利用可能なものとの結合は、その特定のデータ項目の値に固定されているので、それは、ProductId
列のみを使用することができます:
私がすべき正しいバインディングは何
一般的なDataTemplate
は、それが関連付けられている列の対応するItemSource
プロパティにある値を実際に使用するように使用します。
:私はあなたが解決策を見つけるか、同じ問題を抱えている –