我想在DataGrid中快速显示List(OF String)(动态),所以我想
myDataGrid.ItemsSource = myList
将是快速简便的方法,因为这对DataTable非常有用:
myDataGrid.ItemsSource = myDataTable.DefaultView
我的DataGrid将AutoGenerateColumns属性设置为“True”。对于数据表,这可以正常工作,但是当我将List(Of String)分配给ItemsSource时,我的列名称显示为'Length',显示的数据是整数,它们是List中每个String项中的字符数,而不是实际的String项目。
我做错了什么?
修改
我的测试列表是这样创建的:
Dim myList As New List(Of String)
For i As Int32 = 1 To 25
myList.Add("Item #" & i)
Next
以下两种方法产生完全相同的结果。
创建CollectionView:
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
答案 0 :(得分:4)
你的案子实际上很有趣。您将字符串类型的绑定元素绑定到网格。然后,网格会查找可以显示的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();
希望这有帮助。