У меня есть DataGrid с динамическими данными (коллекция пользовательских DataRows), которые я получаю с сервера. DataRow имеет индексатор и свойство Data, которое возвращает всю строку данных для привязки (вы увидите ниже)
Я создаю каждый столбец DataGrid таким образом:
DataGridTextColumn column = new DataGridTextColumn();
Binding binding = new Binding("Data[" + i.ToString() + "]");
binding.Mode = BindingMode.TwoWay;
binding.Converter = _dataContextSelector;
binding.ConverterParameter = dataColumn;
column.Binding = binding;
Что мне нужно сделать: Мне нужно по-разному отображать содержимое DataGridCells в соответствии с данными, которые возвращает конвертер.
Я написал селектор шаблона (который наследует ContentControl) и поместил его в свойство ContentTemplate объекта DataGridCell таким образом:
<Style TargetType="sdk:DataGridCell">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<view:DataGridCellTemplateSelector Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
В этом случае у меня есть весь DataRow как содержимое моего селектора (не могу понять почему, потому что столбец был связан с одним элементом строки), и мой конвертер не вызывается. Весь datarow - это DataContext по умолчанию, так что, я думаю, моя привязка кода в этом случае просто игнорируется.
Поэтому я попытался поместить свой селектор шаблона в ControlTemplate объекта DataGridCell:
<Style TargetType="sdk:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridCell">
<view:DataGridCellTemplateSelector Content="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Но в этом случае у меня есть TextBlock с пустым текстом в качестве содержимого моего селектора ( SHOCKED ). Конвертер вызывается после изменения содержимого.
Как создать селектор шаблонов, который будет выбирать шаблон в соответствии с данными моей привязки (после вызова конвертера)?