【问题标题】:Evaluate Datagrid row value with previous value用以前的值评估 Datagrid 行值
【发布时间】:2017-01-02 10:58:22
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf datagrid datagridtextcolumn


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      相关资源
      最近更新 更多