比较wpf datagrid中的两个数据绑定单元格

时间:2012-08-21 07:24:44

标签: wpf triggers wpfdatagrid

我希望将同一行数据中的数据绑定单元格相互比较,如果它们所在的单元格不同,则以红色突出显示。

如果我静态地为转换提供了一个值,那么正确地突出显示了单元格,但是我不知道如何比较同一行中的两个数据单元。以下不起作用,因为Value参数不接受数据绑定项。这是我第一次涉足WPF,所以请善待;)

有人可以建议我如何比较同一行数据中的两个项目吗?

<DataGridTextColumn x:Name="oldContainerNumberColumn" Binding="{Binding OldContainerNumber}" Header="Old Container Number" IsReadOnly="True" Width="SizeToHeader">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding OldContainerNumber,Converter={StaticResource StringComparisonConverter},ConverterParameter={Binding NewContainerNumber}}" Value="True">
                                    <Setter Property="Background" Value="Red" />
                                    <Setter Property="Foreground" Value="White" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </DataGridTextColumn.CellStyle>

                </DataGridTextColumn>

1 个答案:

答案 0 :(得分:2)

您无法绑定到ConverterParameter,因为它不是DependencyProperty

您可以在MultiBinding

中使用DataTrigger
<DataTrigger Value="True">
    <DataTrigger.Binding>
        <MultiBinding Converter="{StaticResource StringComparisonConverter}">
            <Binding Path="OldContainerNumber" />
            <Binding Path="NewContainerNumber" />
        </MultiBinding>
    </DataTrigger.Binding>
    <Setter Property="Background" Value="Red" />
    <Setter Property="Foreground" Value="White" />
</DataTrigger>

当然,您必须将StringComparisonConverter更改为IMultiValueConverter


我认为更简单的解决方案是添加一个新属性进行比较。像这个样本中的东西:

class YourClass
{
    public int OldContainerNumber { get; set; }
    public int NewContainerNumber { get; set; }

    public bool IsEqual
    {
        get { return OldContainerNumber == NewContainerNumber; }
    }
}

无需转换器:

<Style TargetType="DataGridCell">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsEqual}" Value="True">
            <Setter Property="Background" Value="Red" />
            <Setter Property="Foreground" Value="White" />
        </DataTrigger>
    </Style.Triggers>
</Style>