我有一个DataGrid,其中包含动态数据(自定义DataRow集合),这些数据来自服务器。 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),并将其放置在DataGridCell的ContentTemplate属性中,如下所示:
<Style TargetType="sdk:DataGridCell">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<view:DataGridCellTemplateSelector Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
在这种情况下,我将整个DataRow作为选择器的内容(无法理解为什么,因为列是绑定在行的一个项目上的),而我的转换器没有被调用。整个datarow是默认的DataContext,所以我猜想,在这种情况下,我的code-behind绑定被简单地忽略了。
因此,我尝试将我的模板选择器放置到DataGridCell的ControlTemplate中:
<Style TargetType="sdk:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridCell">
<view:DataGridCellTemplateSelector Content="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但在这种情况下,我的选择器(震惊)的内容是空的TextBlock。转换器在内容更改后被调用。
我该如何创建模板选择器,根据我的绑定数据(在转换器被调用后)选择模板?