将类的列表绑定到WPF中的数据网格
我已经搜索了以前提出的关于这个问题的各种各样的问题,但似乎没有一个能解决我的问题。我的wpf应用程序中有一个数据网格。以下是xml:将类的列表绑定到WPF中的数据网格,wpf,vb.net,binding,datagrid,Wpf,Vb.net,Binding,Datagrid,我已经搜索了以前提出的关于这个问题的各种各样的问题,但似乎没有一个能解决我的问题。我的wpf应用程序中有一个数据网格。以下是xml: <Window x:Class="MainWindow" ... DataContext="{Binding RelativeSource={RelativeSource Self}}"> ... <DataGrid Name="ReportGrid" AutoGenerateCo
<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>
在主窗口的代码中:
Private ReportList As New List(Of NameData)
我已经通过代码多次完成了这样的绑定,但我认为现在是时候做人并学习通过xml进行绑定了。当应用程序运行时,即使我向列表中添加了项,我的数据网格中也没有任何内容
有什么建议吗?正如@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的ItemsSource绑定到ReportList:
注意:如果报表列表项可以在运行时更改,建议使用ObservableCollection而不是List,因为前者具有内置机制,可以在向集合中添加或从集合中删除项时通知UI刷新。根据您目前发布的内容,绑定引擎无法找到您的列表,因为它是私有的。此外,还不清楚窗口的上下文设置在哪里。您还需要发布该代码。有了这些,我可以用c语言给出一些想法,但不能用vb。@GayotFlow DataContext已设置为窗口的代码隐藏:DataContext={Binding RelativeSource={RelativeSource Self}}@GayotFlow我尝试将报表列表公开并将其设置为属性。关于如何设置数据上下文,har07是正确的。如果你有C语言的想法,那就去开枪吧。我不经常使用它,但我对它和.net环境足够熟悉,可以翻译它。如果问题解决了,我会用你建议的VB版本来修改我的问题。对不起,这个问题上没有骰子。即使在调整了通过在属性中来回传递列表向列表中添加项目的过程之后。现在还没有。不过谢谢你的建议,我以后会查看ObservableCollection。
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
<DataGrid
Name="ReportGrid"
AutoGenerateColumns="False"
CanUserAddRows="True"
ItemsSource="{Binding ReportList}">
........
........
</DataGrid>