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



我想比较同一行数据中的数据绑定单元格,如果它们与所在单元格不同,则用红色突出显示。

如果我静态地为转换提供一个值,那么单元格就会正确地高亮显示,但我一生都不知道如何比较同一行中的两个数据单元格。以下内容不起作用,因为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>

不能绑定到ConverterParameter,因为它不是DependencyProperty

您可以在DataTrigger:中使用MultiBinding

<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>

最新更新