将类列表绑定到WPF中的数据网格

时间:2014-05-19 22:58:24

标签: wpf vb.net binding datagrid

我已经搜索过之前曾经问过的关于此的各种问题,但是它们似乎都没有解决我的问题。我的wpf应用程序中有一个数据网格。这是xml:

<Window x:Class="MainWindow"
    ...
    DataContext="{Binding RelativeSource={RelativeSource Self}}">
    ...

    <DataGrid
        Name="ReportGrid"
        AutoGenerateColumns="False"
        CanUserAddRows="True"
        IntemsSource="{Binding}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Date" Binding="{Binding Path=CreateDate}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
        </DataGrid.Columns>
    </DataGrid>

在我的项目中,我有这个课程:

Public Class NameData

    Private _CreateDate() As String
    Public Property CreateDate() As String
        Get
            Return _CreateDate
        End Get
        Set(ByVal value as String)
            _CreateDate = value
        End Set
    End Property

    Private _Name As String
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value as String)
            _Name = value
        End Set
    End Property

End Class

在主窗口的代码中:

Private ReportList As New List(Of NameData)

我已经多次通过代码完成了这样的绑定,但我已经决定是时候通过xml来学习并学习绑定了。当应用程序运行时,即使我将项目添加到列表中,我也没有在我的数据网格中获得任何内容。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

正如@GayotFlow在评论中所建议的那样,绑定引擎只能使用公共属性。尝试将ReportList的定义更改为公共属性:

Private _ReportList As New List(Of NameData)
Public Property ReportList() As List(Of NameData)
    Get
        Return _ReportList
    End Get
    Set(ByVal value as List(Of NameData))
        _ReportList = value
    End Set
End Property

然后在XAML中,将DataGrid&#39; s ItemsSource绑定到ReportList

<DataGrid
    Name="ReportGrid"
    AutoGenerateColumns="False"
    CanUserAddRows="True"
    ItemsSource="{Binding ReportList}">
    ........
    ........
</DataGrid>

注意:如果ReportList项可以在运行时更改,建议使用ObservableCollection而不是List,因为前者具有内置机制,可以在项目通知UI时刷新添加到集合中或从集合中删除。