2017-01-02 8 views
1

DataGridの新しいプロパティをDataGridTemplateColumnに作成する必要があります。このプロパティはブール値で、列が次の規則で評価されるかどうかを示します。現在の行の値が前の行と異なる場合、セルは太字にする必要があります。DataGrid行の値を以前の値で評価します

<DataGridTextColumn Header = "SG" 
        Binding="{Binding SteelGrade}" 
        IsEvaluated="True" <!-- indicates that this column will be bold if the current value is different from the previous line value--> 
> 
</ DataGridTextColumn> 

だから私はIsEvaluatedとルールも作成する必要があります。

誰にでもどのように私がこれを行うことができるかを示すことができるアイデアやリンクがありますか?

答えて

0

これはあまり難しくありません。あなたがこれを行うことができるいくつかの異なる方法があります。 1つの方法は、あなたのコレクション内のすべてのアイテムに前のアイテムへの参照があることを確認することです(ガベージコレクションの問題を避けるためにWeakReferenceであることを確認してください!)次にアイテムのプロパティSameAsLastを作成して、項目。最後に、TextBlockFontWeightプロパティを適切なコンバータを使用してSameAsLastにバインドします。これはおそらく最も効率的なオプションですが、アイテムがソートされるたびに参照チェーンを構築する必要があります。

アイテムクラス自体を変更せずにこれを行う一般的な方法をお探しの場合は、これも可能です。たとえば、TextBlockFontWeightプロパティを"{Binding}"に設定し、それを使用してアイテムを受け取り、前のアイテムと等しいかどうかを確認するIValueConverterを使用することができます。コレクション全体をConverterParameterとして渡し、コレクションがIList<T>であることを確認して、該当するアイテムのインデックスを取得するにはIndexOfを使用し、前のアイテムを見つけるにはElementAtを使用し、適切なFontWeight

もちろんこれは他にもたくさんの方法がありますが、うまくいけばそのアイデアを得ることができます。

関連する問題