我正在为 WPF 网格 (WPFToolKit DataGrid) 组合一些通用的 CellTemplate 样式,但我不确定用于使绑定通用的语法。例如,我有这个模板,如果值为负,它会将值变为红色:
<DataTemplate x:Key="RedNegativeCellTemplate">
<TextBlock Name="QuantityTextBox" Text="{Binding Quantity, StringFormat='c', Mode=OneWay}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Quantity, Converter={StaticResource SignConverter}}" Value="-1">
<Setter TargetName="QuantityTextBox" Property="Foreground" Value="Red"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
您会注意到这在文本框中绑定到列值“<em>Quantity”——即,绑定来自的字段/列是显式的。
所以我可以在我的 WPF DataGrid 中使用它,如下所示:
<sdk:DataGrid ItemsSource="{Binding MyDataSource}" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Net Quantity" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
但是......我真正想做的是让模板的字段绑定通用,以便我可以重用模板,如下所示:
<sdk:DataGrid ItemsSource="{Binding OrdersQuery}"AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Quantity" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>
<sdk:DataGridTemplateColumn Header="Price" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>
<sdk:DataGridTemplateColumn Header="Total" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
现在,这里的问题是似乎没有办法在 CellTemplate 中参数化绑定。但是我不愿意为使用此模板的每一列都设置 3 行以上的 controltemplate,因为它会使 XAML 变得混乱并使其可读性大大降低(更不用说如果我决定将单元格模板更改为文本框周围的边框,我必须在多个地方修改它。
所以我认为 CellTemplate 中的绑定应该看起来像这样(请注意,我们使用 '.' 作为绑定路径):
Text="{Binding Path=., StringFormat='c', Mode=OneWay}"
然后以某种方式从 DataGridTemplateColumn 声明中设置数据上下文——但我不知道该怎么做。
知道怎么做吗?