2017-01-02 42 views
1

我需要在DataGridTemplateColumn中爲DataGrid創建一個新屬性,其中此屬性將爲布爾值,並將通過以下規則指示是否將評估該列;當前行的值與前一行不同時,單元格應該爲粗體。使用以前的值評估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

這應該不會太難。有幾種不同的方法可以做到這一點。一種方法是確保集合中的每個項目都有對前一個項目的引用(確保它是一個WeakReference以避免垃圾回收問題!)然後爲您的項目SameAsLast創建一個屬性,它僅檢查與以前的項目是否相等項目。最後,用適當的轉換器將TextBlockFontWeight屬性綁定到SameAsLast。這可能是最有效的選擇,但它確實需要在每次對項目進行排序時構建引用鏈。

如果您正在尋找一種通用的方式來做到這一點,而無需修改項目類本身,這也是可能的。例如,您可以將TextBlockFontWeight屬性設置爲"{Binding}",並使用IValueConverter接收該項目並檢查其是否與前一項目相同。您需要將整個集合作爲ConverterParameter並且 - 確保集合是IList<T> - 使用IndexOf獲取有問題項目的索引,使用ElementAt查找前一個,然後檢查是否相等,然後返回適當的FontWeight

當然毫無疑問,這可以做很多其他的方式,但希望你能明白。