【问题标题】:How to access DataGridCell Binding Value in Style Resource如何访问样式资源中的 DataGridCell 绑定值
【发布时间】:2020-11-24 21:16:49
【问题描述】:

我想在整个应用程序中重用资源文件中的 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 作为值,而不是项目本身。如何访问绑定到 datagridcell 而不是整个实例的属性?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

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

    通过绑定到属性而不是“整个实例”:

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

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

    一种选择是使用XamlReader.Parse 方法以编程方式为每列创建一个模板。然后,您可以将模板定义为 XAML 字符串并使用string.Replace 或类似的方式以编程方式将绑定路径“注入”到其中。

    【讨论】:

    • 显然不是我希望的答案,但还是谢谢你。非常感谢任何指向条件格式的“罗嗦”方法的指针。
    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多