gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:27:21 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com