2

这几天我一直在苦苦挣扎datagrid databinding。。

我正在尝试从自定义对象中datagrid动态生成。list因为我需要显示的列表对象属性的数量可能会发生变化,所以我不知道确切的列数,也不知道它们的标题。

所以我想,我只动态添加我需要的列并为它们创建绑定(到特定的对象属性)。之后,我将根据绑定填充datagrid来自 a 的数据。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

现在,假设我只想显示Namemy 中的列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为具有不同“名称”的另一行。

4

1 回答 1

2

我建议你将你的网格绑定到你的 List 属性,让 AutoGenerateColumns = True 并在那里听 AutoGeneratingColumn 你决定是否要将该列添加到网格中。

于 2015-02-26T10:01:11.770 回答