【问题标题】:Simple bind to a class in a WPF app简单绑定到 WPF 应用程序中的类
【发布时间】:2011-12-18 03:15:29
【问题描述】:

如何获取我创建的基本类并在 WPF 的列表中提取它的属性?我已经尝试过使用 itemssource 属性,但似乎没有任何效果。

Public Class PageContent
    Public StartDate As DateTime
    Public Header As String
    Public Content As String
End Class

<ListView Name="grid_PageContentList" >
     <ListView.View>
       <GridView>
            <GridViewColumn  DisplayMemberBinding="{Binding StartDate}" Width="50"></GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding Header}" Width="50"></GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding Content}" Width="50"></GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

【问题讨论】:

  • 你已经在看它了。有一个对象,它绑定到列表,现在我需要获取列表以从集合中的反对中吐出值。
  • 什么/你在哪里绑定到列表?
  • grid_PageContentList.ItemsSource = PageContents '这是一个列表(页面内容)
  • 应该可以。怎么了?你检查调试器是否有数据?
  • 它绑定了项目,但每一行的网格中都没有显示任何值。因此您可以选择该行,但您看不到其中的任何内容。

标签: wpf class data-binding


【解决方案1】:

你不能直接绑定到字段,你需要使用属性来代替:

Public Class PageContent
    Public Property StartDate As DateTime
    Public Property Header As String
    Public Property Content As String
End Class

您还需要确保已将您设置为DataContext。如果您只有一个带有代码隐藏方法的简单表单,请将其放入构造函数或 Loaded 处理程序中:

Class MainWindow 

    Public Sub New()

        InitializeComponent()

    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Loaded
        MyData = New List(Of PageContent)
        Dim pc As New PageContent
        pc.Header = "AAAAAAAA"
        pc.StartDate = Now
        MyData.Add(pc)

        pc = New PageContent
        pc.Header = "BBBBBB"
        pc.StartDate = Now.AddMinutes(1)
        MyData.Add(pc)


        DataContext = Me
    End Sub


    Public Property MyData() As List(Of PageContent)

End Class

并在 XAML 中设置您的 ItemsSource

    <ListView Name="grid_PageContentList" ItemsSource="{Binding MyData}" >
        <ListView.View>
            <GridView>
                <GridViewColumn  DisplayMemberBinding="{Binding StartDate}" Width="50"></GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding Header}" Width="50"></GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding Content}" Width="50"></GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

【讨论】:

  • 事实证明,您所需要的只是在您的基类中拥有属性。无需指定项目来源。我应该首先想到这一点,因为它对于 winforms 和 asp.net gridviews 是一样的。
【解决方案2】:

您需要使用 INPC 或 DependencyProperty 将其设为 ObservableCollection。不要只绑定这样的常规属性,因为您可能看不到数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2013-07-31
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多