我一直在玩 WPF DataGrid,我需要做类似的事情。我尝试在 XAML 中完成大部分工作,但您当然也可以在代码隐藏中完成。
就我而言,我想根据正在显示的数据中的信息为 DataGrid 中的每个单元格选择一个模板。我的 DataGrid 显示了全部放在一起以创建串行命令的数据块。我希望能够根据每个“SerialBlock”包含的数据类型选择编辑/显示模板。
public class ColumnTemplateSelector : DataTemplateSelector
{
public DataTemplate ColorTemplate { get; set; }
public DataTemplate RawBytesTemplate { get; set; }
public DataTemplate AddressTemplate { get; set; }
public DataTemplate CommandTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
SerialBlock command = item as SerialBlock;
if (null != command)
{
switch (command.BlockType)
{
case EnumBlockType.Address:
return AddressTemplate;
case EnumBlockType.Color:
return ColorTemplate;
case EnumBlockType.Command:
return CommandTemplate;
case EnumBlockType.RawBytes:
return RawBytesTemplate;
}
}
return base.SelectTemplate(item, container);
}
}
在 XAML 中,我使用以下内容创建列...(我还有几个)
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplateSelector>
<src:ColumnTemplateSelector
ColorTemplate="{StaticResource ColorEditTemplate}"
AddressTemplate="{StaticResource AddressEditTemplate}"
RawBytesTemplate="{StaticResource RawBytesEditTemplate}"
CommandTemplate="{StaticResource CommandEditTemplate}">
</src:ColumnTemplateSelector>
</DataGridTemplateColumn.CellTemplateSelector>
</DataGridTemplateColumn>
然后我创建这样的模板......(当然,我还有几个)
<DataTemplate x:Key="AddressTemplate">
<Border Padding="3" Background="Green">
<TextBlock Text="{Binding Path=BlockText}" />
</Border>
</DataTemplate>
<DataTemplate x:Key="AddressEditTemplate">
<Border Padding="3" Background="Green">
<TextBlock Text="{Binding Path=BlockText}" />
</Border>
</DataTemplate>