2017-01-02 4 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

Это не должно быть слишком сложно. Есть несколько способов сделать это. Одним из способов было бы убедиться, что каждый элемент в вашей коллекции имеет ссылку на предыдущий элемент (убедитесь, что это WeakReference, чтобы избежать проблем с сборкой мусора!) Затем создайте свойство для вашего элемента, SameAsLast, который просто проверяет равенство с предыдущим пункт. Наконец, свяжите свой TextBlockFontWeight собственности с SameAsLast с соответствующим конвертером. Это, вероятно, самый эффективный вариант, но он требует создания цепочки ссылок каждый раз, когда элементы сортируются.

Если вы ищете общий способ сделать это без изменения самого класса предметов, это также возможно. Например, вы можете установить свойство FontWeightTextBlock в "{Binding}", а с ним использовать IValueConverter, который берет элемент и проверяет его равенство с предыдущим элементом. Вы хотите передать всю коллекцию как ConverterParameter и - убедившись, что коллекция IList<T> - используйте IndexOf, чтобы получить индекс этого объекта, используйте ElementAt, чтобы найти предыдущий, а затем проверьте равенство, возвращая FontWeight.

Конечно, нет никаких сомнений в множестве других способов, которые это можно сделать, но, надеюсь, вы получите эту идею.