簡體   English   中英

如何使用List(Of T)作為WPF DataGrid的Itemssource?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM