我将List绑定到DataGrid时遇到问题。
我想要的是有一个列呈现不同的类型,例如:
[Property 1] [String]
[Property 2] [bool]
[Property 3] [enum]
我的实现如下:
public interface IPropertyItem
{
}
public class PropertyItem<T> : IPropertyItem
{
public String Name { get; set; }
public T Value { get; set; }
}
我创建了一个List来存储这些属性:
List<IPropertyItem> PropertyList { get; set; }
并绑定到数据网格:
dataGrid.ItemsSource = PropertyList;
现在的问题是第二列中的所有单元格都将不同的数据类型显示为Text。
但我想要的是有一个bools的复选框,enob的复选框等。
我真的很感激任何帮助。几天来一直坚持这个问题。
谢谢!
- 更新 -
添加DataTemplateSelector解决了这个问题。
答案 0 :(得分:1)
所以你要找DataTemplateSelector。
示例:
<local:DynamicTemplateSelector x:Key="MyTemplateSelector" />
<DataTemplate x:Key="StringTemplate">
<TextBlock>
<Run Text="String: " />
<Run Text="{Binding}" />
</TextBlock>
<DataTemplate x:Key="Int32Template">
<TextBlock>
<Run Text="Int32: " />
<Run Text="{Binding}" />
</TextBlock>
<Style x:Key="MyListStyle" TargetType="ListView">
<Setter Property="ItemTemplateSelector" Value="{StaticResource MyTemplateSelector}"/>
<Setter Property="local:DynamicTemplateSelector.Templates">
<Setter.Value>
<local:Templates>
<local:Template Value={x:Type String} DataTemplate={StaticResource StringTemplate}/>
<local:Template Value={x:Type Int32} DataTemplate={StaticResource Int32Template}/>
</local:Templates>
</Setter.Value>
</Setter>
答案 1 :(得分:0)
您可以使用允许定义单元格模板的DataGridTemplateColumn。其CellTemplateSelector属性有助于定义多个模板,并根据内容类型使用一个模板。你必须为此目的编写自定义DataTemplateSelector
,但这很简单。
答案 2 :(得分:0)
您可以按照以下步骤执行此操作。
1)您需要为集合中的每个类型定义DataTemplate 2)您可以根据类型在DataTrigger中分配模板,也可以使用DataTemplateSelector
希望它有所帮助。