将字符串绑定到TextBlock WPF -我做错了什么?

本文关键字:错了 什么 WPF 字符串 绑定 TextBlock | 更新日期: 2023-09-27 18:16:13

我读了一些线程,这些线程解释了WPF上的绑定,但是当我编写该代码时,它没有将字符串绑定到我的TextBlock,我不知道为什么。

帮助吗?

XAML

        <TextBlock x:Name="myTextBlock"
               Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
c#

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        _name = "Jones";
        myTextBlock.DataContext = Name;          
    }
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }
    // property changed event
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}

将字符串绑定到TextBlock WPF -我做错了什么?

如上所述

this.DataContext = this;

的后台代码。我现在不能测试,updatesourcetrigger应该在你每次输入一个键时更新你的属性。添加模式= TwoWay。

<TextBlock x:Name="myTextBlock" Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

set

myTextBlock.DataContext = Name; 

myTextBlock.DataContext = this; 

最好设置MainWindow的DataContext,而不是设置TextBlock的DataContext。像

InitializeComponent();
    _name = "Jones";
    this.DataContext = this; 

否则,您将需要设置每个控件的DataContext,您将在窗口中使用

Binding使用反射在DataContext中找到指定的路径(这里是Name)。所以你的Name属性是在MainWindow类中,所以你需要设置DataContext为MainWindow类的实例。

将属性名称从name更改为其他属性名称,因为该属性名称已经存在于MainWindow正在继承的窗口类中,并且它试图绑定该属性