【问题标题】:Binding list of class to a data grid in WPF将类列表绑定到 WPF 中的数据网格
【发布时间】:2014-05-19 22:58:23
【问题描述】:

我已经搜索了之前提出的各种有关此问题的问题,但似乎没有一个能完全解决我的问题。我的 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 进行绑定了。当应用程序运行时,即使我将项目添加到列表中,我的数据网格中也没有任何内容。

有什么建议吗?

【问题讨论】:

  • 根据您目前发布的内容,绑定引擎无法找到您的列表,因为它是私有的。此外,还不清楚窗口的上下文设置在哪里。您还需要发布该代码。有了这个,我可以在 c# 中给出一些想法,但不是 vb。
  • @GayotFow DataContext 已设置为窗口的代码隐藏:DataContext="{Binding RelativeSource={RelativeSource Self}}"
  • @GayotFow 我尝试公开报告列表并将其设置为属性。 har07 关于我如何设置数据上下文是正确的。如果您对 C# 有想法,请继续拍摄。我不经常使用它,但我对它和我可以翻译它的 .net 环境足够熟悉。如果有什么问题,我会用你建议的任何 VB 版本来修改我的问题。

标签: wpf vb.net binding datagrid


【解决方案1】:

正如@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 中,将DataGridItemsSource 绑定到ReportList

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

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

【讨论】:

  • 对不起,这个没有骰子。即使在通过属性来回传递列表来调整我的程序以将项目添加到列表之后。还没有。不过感谢您的建议,以后我会查看ObservableCollection
猜你喜欢
  • 2011-01-31
  • 2017-05-14
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
相关资源
最近更新 更多