![](/img/trans.png)
[英]WPF Datagrid.ItemsSource as List<Anything> and use on Linq
[英]How to use a List(Of T) as Itemssource for a WPF DataGrid?
我想快速在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
只需使用List:
DataGrid1.ItemsSource = myList
這兩種方法都在DataGrid中顯示單個列。 該列標題為“長度”,包含與每個字符串條目的長度匹配的整數。
編輯
'testalino'對VB的回答:
DataGrid1.ItemsSource = myList.Select(Function(s) New With {.Value = s}).ToList
你的情況實際上很有趣。 您將字符串類型的綁定元素綁定到網格。 然后,網格會查找可以顯示的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();
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.