如何访问样式资源中的DataGridCell绑定值



我想在整个应用程序中重用资源文件中的DataGridCell样式,以红色显示负值。问题是,传递给转换器的值是类的父实例,而不是绑定属性的值。

网格列如下所示:

<DataGridTextColumn Header="7 T %" Binding="{Binding Item.V7P, StringFormat=p}" CellStyle="{StaticResource ProzentZelle}"/>
<DataGridTextColumn Header="14 T %" Binding="{Binding Item.V14P, StringFormat=p}" CellStyle="{StaticResource ProzentZelle}"/>
<DataGridTextColumn Header="21 T %" Binding="{Binding Item.V21P, StringFormat=p}" CellStyle="{StaticResource ProzentZelle}"/>
<DataGridTextColumn Header="28 T %" Binding="{Binding Item.V28P, StringFormat=p}" CellStyle="{StaticResource ProzentZelle}"/>

样式解析如下:

<con:GtZeroConverterx:Key="G0C"/>
<Style x:Key="ProzentZelle" TargetType="DataGridCell">
<Setter Property="HorizontalAlignment" Value="Right"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=., Converter={StaticResource G0C}}" Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>

转换器代码:

internal class GtZeroConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//value is actually the Item and not one the property passed to Binding
if (System.Convert.ToDecimal(value) >= 0)
{
return true;
}
else
{
return false;
}
}
}

如果Item.V7P是0.75,我希望在转换器中接收0.75作为值,而不是Item本身。如何访问绑定到datagridcell的属性而不是整个实例?

如何访问绑定到datagridcell的属性而不是整个实例?

通过绑定到属性而不是";整个实例":

<DataTrigger Binding="{Binding Path=Item.V7P, Converter={StaticResource G0C}}" Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>

是的,不幸的是,这意味着您将不得不为每列创建一个模板,因为您不能只注入绑定路径并在纯XAML中重用模板的其余部分。

一种选择是使用XamlReader.Parse方法以编程方式为每列创建一个模板。然后可以将模板定义为XAML字符串,并使用CCD_;注入";以编程方式将绑定路径绑定到其中。

最新更新