Стилизация ячейки 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);