1

我需要在 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 以及规则。

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

4

1 回答 1

0

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

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

当然,毫无疑问,还有许多其他方法可以做到这一点,但希望你能明白这一点。

于 2017-01-02T23:49:26.737 回答