使用先前值

时间:2017-01-02 10:58:22

标签: c# wpf datagrid datagridtextcolumn

我需要在DataGridTemplateColumn中为DataGrid创建一个新属性,其中该属性将是boolean,并将指示是否通过以下规则评估列;当前行的值与前一行不同时,单元格应为粗体。

<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以及规则。

有人会有任何想法或链接可以告诉我如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

这不应该太难。有几种不同的方法可以做到这一点。一种方法是确保集合中的每个项目都有对前一项的引用(确保它是WeakReference以避免垃圾收集问题!)然后为您的项目SameAsLast创建一个属性,它只是检查与前一项的相等性。最后,使用适当的转换器将TextBlock的{​​{1}}属性绑定到FontWeight。这可能是最有效的选项,但它确实需要在每次对项目进行排序时构建引用链。

如果您正在寻找一种通用的方法来执行此操作而不修改项类本身,这也是可能的。例如,您可以将SameAsLast的{​​{1}}属性设置为FontWeight,然后使用一个TextBlock来获取该项并检查其与上一个项目。您需要将整个集合作为"{Binding}"传递,并且 - 确保集合是IValueConverter - 使用ConverterParameter来获取相关项目的索引,使用{{1找到前一个,然后检查是否相等,返回相应的IList<T>

当然,毫无疑问还有很多其他方法可以做到,但希望你能得到这个想法。