我已经挣扎了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
另一行中显示为一个具有不同“名称”的项目。
我建议您将网格绑定到List属性,让AutoGenerateColumns = True并听AutoGeneratingColumn,然后决定是否要将该列添加到网格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句