Я уже несколько дней борюсь с datagrid
databinding
..
Я пытаюсь создать datagrid
динамически из list
настраиваемых объектов. Поскольку количество свойств объекта списка, которые мне нужно отобразить, может измениться, я не знаю ни точного количества столбцов, ни их заголовков.
Поэтому я подумал, что я буду динамически добавлять только нужные мне столбцы и создавать для них привязки (к конкретным свойствам объекта). После этого я заполнял datagrid
данными из list
на основе привязок.
Например:
Создаю пустой datagrid
<DataGrid x:Name="MyDataGrid" AutoGenerateColumns="false" ItemsSource="{Binding}" Margin="0,0,0,31" Grid.RowSpan="2">
</DataGrid>
Я создаю свой список для хранения моих данных и объекта данных:
Public Class Res
Public Shared TableData As New List(Of DataItem)
End Class
Public Class DataItem
Public Property Name() As String
Public Property MyProperty() As String
Public Property Prop() As String
Public Property Prop1() As String
End Class
Теперь предположим, что я хочу показать только столбец Name
в моем datagrid
, поэтому я добавляю столбец с определенной привязкой (предположительно, в этом и заключается проблема, но я не могу ее понять):
Dim col As New DataGridTextColumn
Dim bb As New Binding
bb.Path = New PropertyPath("Name")
bb.Mode = BindingMode.TwoWay
bb.Source = Res.TableData
col.Binding = bb
col.Header = "Name"
MyDataGrid.Columns.Add(col)
Затем я наконец создаю и добавляю данные в свой список:
Dim entry As New DataItem
entry.Name = "Test Name"
entry.MyProperty = "Test Property"
entry.Prop = "one Entry"
Res.TableData.Add(entry)
Me.MyDataGrid.ItemsSource = Res.TableData
В результате весь столбец заполнен теми же данными. Я намеревался заполнить только ту строку, которая соответствует точному list
элементу. Например, если позже я захочу добавить в list
еще один элемент с другим «Именем», он также должен отображаться в datagrid
как другая строка с другим «Именем».