DataGridCell内容模板选择器Silverlight
我有一个带有动态数据(自定义数据行的集合)的DataGrid,这是我从服务器获得的。DataRow有一个索引器和一个属性数据,返回绑定的整个数据行(如下所示) 我以以下方式创建DataGrid的每一列:DataGridCell内容模板选择器Silverlight,silverlight,datagridcell,contenttemplateselector,Silverlight,Datagridcell,Contenttemplateselector,我有一个带有动态数据(自定义数据行的集合)的DataGrid,这是我从服务器获得的。DataRow有一个索引器和一个属性数据,返回绑定的整个数据行(如下所示) 我以以下方式创建DataGrid的每一列: DataGridTextColumn column = new DataGridTextColumn(); Binding binding = new Binding("Data[" + i.ToString() + "]"); binding.Mode = BindingMode.Tw
DataGridTextColumn column = new DataGridTextColumn();
Binding binding = new Binding("Data[" + i.ToString() + "]");
binding.Mode = BindingMode.TwoWay;
binding.Converter = _dataContextSelector;
binding.ConverterParameter = dataColumn;
column.Binding = binding;
<Style TargetType="sdk:DataGridCell">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<view:DataGridCellTemplateSelector Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
我需要做什么:我需要根据转换器返回的数据以不同的方式显示DataGridCells的内容我编写了模板选择器(它继承了ContentControl),并以如下方式将其放入DataGridCell的ContentTemplate属性中:
DataGridTextColumn column = new DataGridTextColumn();
Binding binding = new Binding("Data[" + i.ToString() + "]");
binding.Mode = BindingMode.TwoWay;
binding.Converter = _dataContextSelector;
binding.ConverterParameter = dataColumn;
column.Binding = binding;
<Style TargetType="sdk:DataGridCell">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<view:DataGridCellTemplateSelector Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
在本例中,我将整个DataRow作为选择器的内容(无法理解为什么,因为该列绑定在该行的一个项目上),并且没有调用我的转换器。整个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)。内容更改后调用转换器。
如何创建模板选择器,该选择器将根据我的绑定数据(在调用转换器后)选择模板?- 考虑使用隐式数据模板而不是自定义模板选择器
- 创建自定义DataGridBoundColumn并重写GenerateElement
- 在GenerateElement中,返回ContentControl。必须使用自定义列的Binding属性绑定该ContentControl的Content属性。
- 如果使用隐式数据模板,则到此为止
- 如果使用您自己的DataGridCellTemplateSelector,那么只需使用它而不是上面提到的普通ContentControl李>