【问题标题】:WPF C# DataGrid binding List with different types具有不同类型的 WPF C# DataGrid 绑定列表
【发布时间】:2013-02-05 07:02:20
【问题描述】:

我在将 List 绑定到 DataGrid 时遇到问题。

我想要的是有一个展示不同类型的列,例如:

[属性 1] [字符串]

[属性 2] [bool]

[属性 3] [枚举]

我的实现如下所示:

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;

现在的问题是第二列中的所有单元格都将不同的数据类型显示为文本。

但我想要的是有一个用于布尔值的复选框、用于枚举的组合框等。

我非常感谢任何帮助。这几天一直被这个问题困扰。

谢谢!

-- 更新--

添加一个 DataTemplateSelector 解决了这个问题。

【问题讨论】:

    标签: c# wpf binding types datagrid


    【解决方案1】:

    您可以使用允许定义单元格模板的DataGridTemplateColumn。它的CellTemplateSelector 属性有助于定义多个模板并根据内容类型使用一个模板。为此,您必须编写自定义 DataTemplateSelector,但这很简单。

    【讨论】:

    • DataTemplateSelector 正是我想要的!
    【解决方案2】:

    所以你在寻找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>
    

    【讨论】:

    • 非常感谢您的帮助!
    【解决方案3】:

    您可以按照以下步骤操作。

    1) 您需要为集合中的每种类型定义 DataTemplate。
    2)您可以根据类型在DataTrigger中分配模板,也可以使用DataTemplateSelector

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2021-04-11
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多