我将为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>
你会注意到这个文本框有一个绑定到列值“数量”的绑定 - 也就是说,绑定来自的字段/列是明确的。
所以我可以在我的WPF数据表格中使用它,如下所示:
<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行以上的控制模板,因为这会使XAML杂乱无章且难以阅读(更不用说如果我决定在文本框周围添加边框来更改单元格模板,我需要在多个地方进行修改)。所以我认为,CellTemplate中的绑定应该像这样:(请注意,我们在绑定路径中使用“.”)
Text="{Binding Path=., StringFormat='c', Mode=OneWay}"
然后,一些如何从DataGridTemplateColumn声明中设置数据上下文的方式——但我不知道如何做到这一点。
有任何想法如何实现吗?