Как использовать список (из T) в качестве Itemssource для WPF DataGrid?
Я хотел быстро отобразить список (строки) в DataGrid (динамически), поэтому я подумал
myDataGrid.ItemsSource = myList
был бы быстрый и простой способ сделать это, так как это отлично подходит для DataTable:
myDataGrid.ItemsSource = myDataTable.DefaultView
мой DataGrid имеет свойство AutoGenerateColumns значение "True". И для datatable это отлично работает, но когда я назначаю список (строки) ItemsSource, мое имя столбца отображается как "длина" , а отображаемые данные-это целые числа символов в каждом элементе строки в списке, а не фактический элемент строки.
что я делаю не так?
редактировать
мой список тестов создается так:
Dim myList As New List(Of String)
For i As Int32 = 1 To 25
myList.Add("Item #" & i)
Next
следующие 2 метода дают одинаковые результаты.
создайте 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
1 ответов
ваш случай на самом деле смешной. Вы привязываете элементы типа string к сетке. Затем сетка ищет свойства в типе строка что он может показать. единственное найденное свойство-Length, поэтому оно создает столбец с именем Length и отображает его значение.
что вам нужно сделать, чтобы избежать этого, это создать класс-оболочку для string.
либо создайте класс явно:
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();
надеюсь, что это помогает.