我希望将同一行数据中的数据绑定单元格相互比较,如果它们所在的单元格不同,则以红色突出显示。
如果我静态地为转换提供了一个值,那么正确地突出显示了单元格,但是我不知道如何比较同一行中的两个数据单元。以下不起作用,因为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>
答案 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>