0

同じ行のデータ内のデータバインドされたセルを相互に比較し、それらが含まれているセルと異なる場合は赤で強調表示することを検討しています。

変換の値を静的に指定すると、セルは正しく強調表示されますが、同じ行にある2つのデータセルを比較する方法を一生理解することはできません。Valueパラメータはデータバインドされたアイテムを受け入れないため、以下は機能しません。これはWPFへの私の最初の進出ですので、親切にしてください;)

同じ行のデータで2つのアイテムを比較する方法を教えてもらえますか?

<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

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