#wpf #datagrid #multibinding
#wpf #сетка данных #многозадачность
Вопрос:
Я пытаюсь изменить цвет переднего плана ячейки сетки данных, А НЕ всей строки, учитывая значение содержимого конкретной ячейки. Например, если значение даты в ячейке устарело, я хочу установить для переднего плана красный цвет. Я почти нахожусь там, где использую многозадачность для извлечения двух значений из таблицы данных и их анализа с помощью value converter, который реализует IMultiValueConverter.
Короче говоря, и без необходимости заходить в сам конвертер, я написал следующий XAML:
<GlobalTasks:CellHighlighterConverter x:Key="cellHighlighterConverter"/>
<Style x:Key="CellHighlighterStyle">
<Setter Property="my:ExtendedDataGrid.Foreground">
<Setter.Value>
<MultiBinding Converter="{StaticResource cellHighlighterConverter}">
<MultiBinding.Bindings>
<Binding RelativeSource="{RelativeSource self}"/>
<Binding Path="Row" Mode="OneWay"/>
</MultiBinding.Bindings>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
Затем я добавил в свою сетку данных: CellStyle="{StaticResource CellHighlighterStyle}"
.
Теперь мой конвертер видит первое Value[0]
свойство как DataGridCell, но второе значение является каким-то выдуманным DependencyProperty. Похоже, что это создало свойство по умолчанию или фиктивное свойство, когда я действительно хочу получить строку. На самом деле, я бы действительно хотел получить объект класса, связанный с этой строкой. Моя сетка данных привязана к List<of a class object>
.
Я уверен, что я в нескольких дюймах от этого. Как мне проанализировать строку сетки данных, чтобы я мог извлечь значение поля, или сам объект, привязанный к этой строке или столбцу, чтобы я мог вернуть цвет, который я хочу вернуть? ИЛИ, есть ли лучший способ для меня выборочно изменять свойства ячейки сетки данных с учетом значения?
Ответ №1:
DataContext ячейки должен быть объектом данных строки, попробуйте изменить вторую привязку к этому:
<Binding />
Которая привязывается непосредственно к DataContext.
Комментарии:
1. Абсолютно в точку. Спасибо за ваш ответ. Это сработало отлично.