wpf - 如何使用 List(Of T) 作为 WPF DataGrid 的 Itemssource?

标签 wpf visual-studio-2010 list datagrid

我想在 DataGrid 中(动态)快速显示 List(OF String),所以我想

myDataGrid.ItemsSource = myList

这将是一种快速简便的方法,因为这对 DataTable 非常有用:
myDataGrid.ItemsSource = myDataTable.DefaultView

我的 DataGrid 将 AutoGenerateColumns 属性设置为“True”。对于数据表,这很好用,但是当我将 List(Of String) 分配给 ItemsSource 时,我的列名显示为“长度”,并且显示的数据是整数,即列表中每个字符串项目中的字符数,而不是实际的字符串项。

我究竟做错了什么?

编辑

我的测试列表是这样创建的:
Dim myList As New List(Of String)
  For i As Int32 = 1 To 25
  myList.Add("Item #" & i)
Next

以下 2 种方法产生完全相同的结果。

创建一个 Collection View :
Dim cv = CType(CollectionViewSource.GetDefaultView(myList), CollectionView)
DataGrid1.ItemsSource = cv

只需使用列表:
DataGrid1.ItemsSource = myList

这两种方法都在 DataGrid 中显示单个列。该列标题为“长度”,包含与每个字符串条目的长度匹配的整数。

编辑
将“testalino”的答案翻译为 VB:
DataGrid1.ItemsSource = myList.Select(Function(s) New With {.Value = s}).ToList

最佳答案

你的情况其实很有趣。您正在将字符串类型的元素绑定(bind)到网格。然后网格查找类型为 String 的属性。它可以显示。找到的唯一属性是 Length,因此它会创建一个名为 Length 的列并显示其值。

为了避免这种情况,您需要做的是为字符串创建一个包装类。

要么显式创建一个类:

class StringWrapper
{
     string Value { get; set;}
}

或使用 LINQ:
List<string> strings = new List<string>();
strings.Add("abc");
strings.Add("def");
dataGrid.ItemsSource = strings.Select(s => new { Value = s }).ToList();

希望这可以帮助。

关于wpf - 如何使用 List(Of T) 作为 WPF DataGrid 的 Itemssource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976836/

相关文章:

.net - 样式化 ContentControl

.NET 4.0 应用程序在没有 Visual Studio 的机器上抛出异常

list - J,找不到的动词

c# - Visual Studio 单元测试生成错误

c - gtk-get 在列表存储 TreeView 中单击了哪个项目

java - 字符不会存储在列表中

WPF 和 MVVM : Any examples using VB. 网络?

c# - 显示 Prism 模块内部的 Prism 模块

c# - 列表框没有显示我的第一个项目

c# - Visual Studio SOAP 服务引用客户端 : see XML message