Причина, по которой это происходит, заключается в том, что DataContext
устанавливается на уровне строки и не изменяется для каждого DataGridCell
.Поэтому, когда вы привязываетесь к IsDirty
, он привязывается к свойству объекта данных уровня строки, а не к уровню ячейки.
Поскольку в вашем примере показано, что для AutoGenerateColumns
установлено значение false, я предполагаю, что вы сами генерируете столбцы, например, DataGridTextColumn
со свойством Binding
, установленным на привязку к полю фактического значения.Чтобы изменить стиль ячейки на желтый, вам нужно изменить CellStyle
для каждого DataGridColumn
следующим образом:
foreach (var column in columns)
{
var dataColumn =
new DataGridTextColumn
{
Header = column.Caption,
Binding = new Binding(column.FieldName),
CellStyle =
new Style
{
TargetType = typeof (DataGridCell),
Triggers =
{
new DataTrigger
{
Binding = new Binding(column.FieldName + ".IsDirty"),
Setters =
{
new Setter
{
Property = Control.BackgroundProperty,
Value = Brushes.Yellow,
}
}
}
}
}
};
_dataGrid.Columns.Add(dataColumn);
}
Вы можете поэкспериментировать с изменением DataContext
каждой ячейки, используя DataGridColumn.CellStyle
.Возможно, только тогда вы сможете привязать ячейки к 'IsDirty' непосредственно из стиля сетки, как вы делаете это, не делая это для каждого столбца отдельно.Но у меня нет реальной модели данных, вы должны это проверить.