Wpf 将DataGrid绑定到集合<;列表>;

Wpf 将DataGrid绑定到集合<;列表>;,wpf,data-binding,wpfdatagrid,infragistics,Wpf,Data Binding,Wpfdatagrid,Infragistics,DataGrid是否可以绑定到集合类型 将数据网格绑定到集合有几个问题,这对我来说也有点奏效。但是,我专门寻找DataGridCollection 当我尝试时,列表只是作为对象显示在数据网格上,如下所示: 名称 -System.Collections.Generic.List'1[System.Int32] 值 鲍勃 23 43000 +System.Collections.Generic.List'1[System.Int32] 在这种情况下,列表与集合有何不同? 列表没有条目标识符,因此

DataGrid
是否可以绑定到
集合
类型

数据网格
绑定到
集合
有几个问题,这对我来说也有点奏效。但是,我专门寻找
DataGrid
Collection


当我尝试时,
列表
只是作为对象显示在
数据网格
上,如下所示:

名称
-System.Collections.Generic.List'1[System.Int32]

鲍勃
23
43000
+System.Collections.Generic.List'1[System.Int32]


在这种情况下,
列表
集合
有何不同?
列表
没有条目标识符,因此列表中的条目不能自动分组到
数据网格
中的列中

例子: 在
集合中

条目1包含
列表
:“Bob”,2343000和
条目2包含
列表
:“Alice”,4271000

我是否能够将
数据模板
用于
列表
以获得以下显示
姓名|年龄|工资
鲍勃| 23 | 43000
爱丽丝| 42 | 71000

请注意,字符串Name、Age和Salary不属于
列表的一部分。

我的计划
  • 标题行绑定到
    列表
    以获取
    数据网格标题中的列名
  • 剩余的行绑定到
    集合
    ,以获取在
    数据网格中填充的数据
  • 具体地说,我想知道是否可以将这3个字符串(姓名、年龄、薪水)放在
    列表中
    并仅绑定标题行。
    DataGrid
    的其余行可以绑定到集合

    这可能吗?
    理想情况下,我希望使用Infragistics的
    XamDataGrid
    ,但是
    DataGrid
    的任何解决方案都将是一个很好的起点


    编辑 为什么我不使用
    集合
    ? 我只想在
    DataGrid
    中显示列的子集

    我有大约5个屏幕,显示两种类型的列
    Employee
    EmployeeDetails
    。这两种类型都有大约100个不同的属性,我只想在每个屏幕上显示大约20个属性作为列。因此,我正在为每个
    员工
    /
    员工详细信息
    对象创建一个
    列表
    ,该对象仅包含这20个属性


    子集是在运行时通过读取一些配置文件来定义的。因此,我不能静态地定义我需要显示的内容。

    这听起来不正确。在集合中显示的项目只是具有属性的对象。为什么不只是拥有一个具有这些属性的对象集合呢

    为了迭代第二个列表,您需要在绑定到该列表的绑定行中使用另一个ItemsControl作为其数据源。否则,您将始终只接收System.Collections.Generic.List的1[System.Int32]绑定值,因为这是正在迭代的当前级别

    如果希望使其保持通用性,甚至可以绑定到集合,允许对象定义其属性,并在Datagrid中,仅绑定到它认为应该可见的属性(无论对象是否支持)

    您可以使用绑定转换器提取列表中的成员:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is List<string> && parameter is int)
        {
            return ((List<string>)value)[(int)parameter];
        }
    
        return null;
    }
    
    强类型、可读性更强、可维护性更强


    编辑:

    阅读编辑后:绝对不要使用
    列表
    。只是不要要求XamDataGrid为每个字段自动生成一列。您还了解了如何隐藏列


    编辑:

    与公开
    集合相比,公开
    集合
    属性并在其后面编写一些代码对MVVM友好得多

    请记住,XamDataGrid控件的限制仅与MVVM模式的视图部分相关不要因此更改ViewModel逻辑


    还有一个相关的问题可能会有所帮助:

    当我考虑您的答案时,请参阅编辑,了解我为什么不使用
    集合
    。此外,子集是在运行时通过读取一些配置文件定义的。因此,我无法静态定义需要显示的内容。@user640378如果需要,您可以在运行时动态隐藏列(参见示例),感谢您的更新。动态隐藏列的问题是我需要使用
    XamDataGrid
    FieldLayout
    。这将要求我在代码背后有代码;我正在研究MVVM样式的方法。关闭列的自动生成,您就不必担心“创建列的子集”。您只需定义要显示的内容,这就是显示的内容。子集是在运行时通过读取一些配置文件来定义的。因此,我不能静态地定义我需要显示的内容。
    public class Employee : INotifyPropertyChanged
    {
        public string Bob
        {
            ...
        }
    
        public int Age
        {
            ...
        }
    
        public double Salary
        {
            ...
        }
    }