DataGrid
可以绑定Collection<List>
类型吗?
关于将DataGrid
绑定到Collection<Collection>
有几个问题,它对我也有用。但是,我正在寻找DataGrid
&lt; - Binding - &gt; Collection<List>
。
当我尝试时,List
只是显示为DataGrid
上的对象,如:
名称
- System.Collections.Generic.List&#39; 1 [System.Int32]
价值
鲍勃 23
43000
+ System.Collections.Generic.List&#39; 1 [System.Int32]
List
与Collection
的区别如何? List
没有条目标识符,因此列表中的条目无法自动分组到DataGrid
的列中。
Collection<List>
:
entry1包含List
:&#34; Bob&#34;,23,43000和
entry2包含List
:&#34; Alice&#34;,42,71000。
我是否可以使用DataTemplate
List
来获得以下显示?
姓名|年龄|薪水
鲍勃| 23 | 43000
爱丽丝| 42 | 71000
请注意,字符串Name,Age和Salary不是Lists
的一部分。
List<String>
,以获取DataGrid's
标题中的列名。Collection<List>
以获取DataGrid
中填充的数据。特别是,我想知道我是否可以将这3个字符串(姓名,年龄,薪水)放在List<String>
中并仅将标题行绑定到它。 DataGrid
的其余行可以绑定到Collection。
这可能吗?
<小时/> 理想情况下,我想使用 Infragistics&#39;XamDataGrid
,但DataGrid
的任何解决方案都是一个很好的起点。
<小时/>
为什么我不使用Collection<Employee>
?
我想在DataGrid
。
我有大约5个屏幕,显示2种Employee
和EmployeeDetails
的列。这两种类型每种都有大约100种不同的属性,我只对在每个屏幕上显示大约20个属性作为列感兴趣。因此,我为每个仅包含这20个属性的List
/ Employee
对象创建EmployeeDetails
。
通过读取一些配置文件在运行时定义子集。因此,我无法静态定义我需要展示的内容。
答案 0 :(得分:2)
你可以使用绑定转换器来提取列表中的成员:
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;
}
......老实说,我不明白你想要达到的目标。您的字符串列表代表对象的属性,为什么不只使用Collection<Employee>
Employee
public class Employee : INotifyPropertyChanged
{
public string Bob
{
...
}
public int Age
{
...
}
public double Salary
{
...
}
}
强类型,更易读,更易于维护。
编辑:
阅读完编辑后:绝对不要使用List<string>
。只是不要让您的XamDataGrid自动为每个字段生成一列。您还some examples了解如何隐藏列。
编辑:
以方式更多MVVM友好来公开Collection<Employee>
属性+编写一些代码,而不是公开Collection<List<string>>
。
请记住,XamDataGrid控件的限制是纯粹与MVVM模式的视图部分相关。 请勿更改ViewModel逻辑。
此处还有一个相关问题可以提供帮助:XamDataGrid column visibilty is not working using MVVM
答案 1 :(得分:1)
这听起来不对。您在Collection中显示的项目只是具有属性的对象。为什么不拥有具有这些属性的对象集合?
为了迭代第二个列表,您需要绑定到该列表的绑定行中的另一个ItemsControl作为其数据源。否则,您将始终只接收System.Collections.Generic.List'1 [System.Int32]绑定值,因为这是正在迭代的当前级别。
如果你想保持它的通用性,你甚至可以绑定到Collection,允许对象定义它的属性,在Datagrid中,只绑定到它认为应该可见的属性(无论对象是否支持)。