我有一个带有动态数据(自定义 DataRows 的集合)的 DataGrid,它是从服务器获取的。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 作为我的选择器的内容(不明白为什么,因为该列被绑定在行的一项上)并且我的转换器没有被调用。整个数据行是默认的 DataContext,所以我想,在这种情况下,我的代码隐藏绑定只是忽略了。
所以我尝试将我的模板选择器放到 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 与空文本作为我的选择器的内容(SHOCKED)。更改内容后调用转换器。如何创建模板选择器,它将根据我的绑定数据选择模板(调用转换器后)?