WPF数据绑定,值不更新

本文关键字:更新 数据绑定 WPF | 更新日期: 2023-09-27 18:15:32

我知道这是非常常见的问题,但我只是不能让按钮更新为"Pressed1"answers"Pressed2"的内容时,改变"默认"的buttonContent。看了几个问题后,我找不到适合我的答案,我根本找不到这里有什么问题,所以这里是蹩脚的代码:

带有按钮的窗口

public partial class MainWindow : Window
{
    Code_Behind cB;
    public MainWindow()
    {
        cB = new Code_Behind();
        this.DataContext = cB;
        InitializeComponent();
    }
    private void button_Click(object sender, RoutedEventArgs e)
    {
        cB.buttonPressed();
    }
}

这是单独的类

   public class Code_Behind : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string _buttonContent = "Default";
    public string buttonContent
    {
        get { return _buttonContent; }
        set { 
                if (_buttonContent != value) 
                    {
                        buttonContent = value;
                        OnPropertyChanged("buttonContent"); 
                    } 
            }
    }
    public void buttonPressed()
    {
        int timesPressed = 0;
        if (timesPressed != 1)
        {
                _buttonContent = "Pressed1";
                timesPressed++;
        }
        else if (timesPressed != 2)
        {
                _buttonContent = "Pressed2";
                timesPressed++;
                timesPressed = 0;
        }
    }
    protected void OnPropertyChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}

WPF数据绑定,值不更新

您不是在设置属性,而是在设置后台字段。因此,没有触发PropertyChanged事件。

代替

_buttonContent = "Pressed1";
...
_buttonContent = "Pressed2";

buttonContent = "Pressed1";
...
buttonContent = "Pressed2";

除此之外,用Pascal大小写书写属性名是一个被广泛接受的惯例,即用ButtonContent代替buttonContent

此外,您的属性设置器看起来很奇怪(可能是因为您试图在一行中压缩太多代码)。

不是

set
{
    if (_buttonContent != value)
    {
        _buttonContent = value;
    } 
    OnPropertyChanged("buttonContent");
}

当然应该是

set
{
    if (_buttonContent != value)
    {
        _buttonContent = value;
        OnPropertyChanged("buttonContent");
    } 
}