【问题标题】:How do I databind a property to a textbox in Wpf如何将属性数据绑定到 Wpf 中的文本框
【发布时间】:2012-06-23 22:05:28
【问题描述】:

我创建了一个 wpf vb.net 项目并尝试设置一个简单的数据。我不确定如何设置我的 DataContext = this;在代码绑定中。目前,当我运行程序时,我的标签永远不会更新。我在下面包含了我的代码。我错过了什么?

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Label Content="{Binding person.Name}"/>
    </Grid>
</Window>

Class MainWindow 
    Private Property person As New Person()

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        person.Name = "Poco"
    End Sub
End Class

System.ComponentModel

Public Class Person
    Implements INotifyPropertyChanged

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

            OnPropertyChanged(New PropertyChangedEventArgs("Name"))
        End Set
    End Property

    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

    Public Sub OnPropertyChanged(ByVal e As PropertyChangedEventArgs)
        If Not PropertyChangedEvent Is Nothing Then
            RaiseEvent PropertyChanged(Me, e)
        End If
    End Sub
End Class

【问题讨论】:

    标签: vb.net data-binding inotifypropertychanged


    【解决方案1】:

    这很接近 - 您需要在 XAML 中命名您的标签(以便您可以从后面的代码中引用它),然后在绑定对象中指定要绑定的数据的路径。在这种情况下,您将绑定一个带有 Name 属性的对象,您希望将其内容分配给标签文本:

    <Label Name="MyLabel" Content="{Binding Path = Name}"/>
    

    然后在您的代码中,您需要将标签的 DataContext 设置为您希望将其绑定到的对象,在本例中为特定实例,somePersonPerson

    Private somePerson As New Person
    
    Public Sub New()
        InitializeComponent()
        MyLabel.DataContext = somePerson
        somePerson.Name = "Poco"
    End Sub
    

    【讨论】:

    • 谢谢 J..,我对我的代码进行了更多思考,我所需要的只是将我的 DataContext 设置为 person。就像你会做一个 viewModel 一样。这使我不必为我的任何控件命名。我很欣赏你的回应。
    • @poco - 将您的类 DataContext 设置为 person 有效,但这是一种相当有限的方法。这意味着您班级中的所有绑定都将查找person。您真的不希望 person 成为整个班级的 DataContext,只是为了那个特定的标签。您班级的其他部分可能希望拥有其他数据上下文。取决于你在做什么,我猜,以及它可能变得多么复杂。
    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2014-03-27
    相关资源
    最近更新 更多