我已经搜索过之前曾经问过的关于此的各种问题,但是它们似乎都没有解决我的问题。我的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来学习并学习绑定了。当应用程序运行时,即使我将项目添加到列表中,我也没有在我的数据网格中获得任何内容。
有什么建议吗?
答案 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时刷新添加到集合中或从集合中删除。