0

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

如果我静态地为转换提供一个值,则单元格会正确突出显示,但我一生都无法弄清楚如何比较同一行中的两个数据单元格。以下内容不起作用,因为 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>
4

1 回答 1

2

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

您可以使用 aMultiBindingDataTrigger

<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>
于 2012-08-21T08:55:20.507 回答