Проблема изменения цвета переднего плана ячейки сетки данных WPF с использованием многосвязи

#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. Абсолютно в точку. Спасибо за ваш ответ. Это сработало отлично.