Стилизация ячейки DataGrid в коде на основе свойства класса

У меня есть DataGrid, связанный с массивом и со столбцами, сгенерированными во время выполнения на основе размера массива:

ObservableCollection<DisplayByte[]> items = new ObservableCollection<DisplayByte[]>();

// List is populated
... 
...

Style style = new Style(typeof(TextBlock));

Setter setter = new Setter(TextBlock.ForegroundProperty, Brushes.LightGreen);

DataTrigger trigger = new DataTrigger() { Binding = new Binding("IsEqual"), Value = true };

trigger.Setters.Add(setter);
style.Triggers.Add(trigger);

dgBlobViewer.Columns.Add( new DataGridTextColumn
                          { 
                              Header = "",
                              Binding = new Binding(string.Format("[{0}].Value", columnIndex++)),
                              ElementStyle = style
                          });

Класс DisplayByte это:

public class DisplayByte : INotifyPropertyChanged 
{
    private bool m_isequal;
    public DisplayByte(string value)
    {
        Value = value;
        IsEqual = false;
    }

    public String Value
    {
        get;
        set;
    }

    public Boolean IsEqual
    {
        get
        {
            return m_isequal;
        }
        set
        {
            m_isequal = value;
            OnPropertyChanged(new PropertyChangedEventArgs("IsEqual"));
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, e);
        }
    }
}

Привязка работает правильно, поэтому я отображаю в ячейках таблицы данных значение свойства Value. Я хочу стилизовать ячейки, поэтому их фон изменяется, если свойство IsEqual имеет значение true, но оно не работает. Все клетки всегда белые.

XAML Датагрида таков:

<DataGrid x:Name="dgBlobViewer" 
          Grid.Row="0" 
          Grid.RowSpan="1" 
          Margin="10,10,10,0" 
          ItemsSource="{Binding}"
          AutoGenerateColumns="False"
          FontFamily="Consolas" >

Что-то не так с привязкой или стилем?

1 ответ

Решение

IsEqual свойство вашего элемента данных, поэтому вы должны использовать DataTrigger в этом случае:

var trigger = new DataTrigger();
trigger.Binding = new Binding("[index].IsEqual");//index is placeholder.
trigger.Value = true;
trigger.Setters.Add(setter);
style.Triggers.Add(trigger);
Другие вопросы по тегам