Итак, у меня есть столбцы, определенные так:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=COLUMN_NAME, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
TextBox - не единственный элемент управления, который может существовать в шаблоне данных для столбца, у меня есть DateTimePickers, ComboBoxes и т. Д.
И что я хочу сделать, это определить некоторые триггеры стиля, подобные этому, которые обращаются к какому-либо свойству в DataRow:
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}},
Path=Row.RowState}" Value="Modified">
<Setter Property="Foreground" Value="LightGreen" />
</DataTrigger>
</Style.Triggers>
</Style>
Теперь, к сожалению, кажется, что текстовые поля никогда не являются логическими потомками DataGridRows. Так в чем же решение? Конечно, я могу создать триггер, который нацелен на сами DataGridRows, но это избыточно, потому что установка свойства переднего плана ничего не даст (TextBoxes и другие элементы управления располагаются впереди).
Любая помощь наиболее ценится.
Фуга
РЕДАКТИРОВАТЬ: Вот решение, которое я выбрал, потому что RowState не уведомляет своих слушателей и расширение DataRow проблематично.
1) Привязать событие к элементам управления, когда их данные изменяются.
2) Обновите стиль, чтобы снова проверить RowState:
Style s = ((TextBox)sender).Style;
((TextBox)sender).Style = null;
((TextBox)sender).Style = s;
Очевидно, это будет сделано более общим, чем это.
edit 2: Это явно не сработает, так как мне нужно будет сбросить стиль для каждого элемента управления в отдельности, что даже если бы это было возможно, было бы плохо делать