我想在 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/