You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用INotifyPropertyChanged实现属性变更时自动执行代码

问题原因&解决方案

现存问题

  • 未给ValueChange实例的PropertyChanged事件绑定处理方法,事件触发后无对应订阅逻辑执行
  • ValueChange实例是按钮点击方法内的局部变量,方法执行完成后就会被回收,无法长期使用

修复代码

调整后的MainWindow逻辑

public partial class MainWindow : Window
{
    // 将ValueChange改为窗口全局成员
    private ValueChange _test;

    public MainWindow()
    {
        InitializeComponent();
        // 实例化时就绑定PropertyChanged事件处理方法
        _test = new ValueChange();
        _test.PropertyChanged += PropertyChanged;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // 直接修改全局实例的属性即可触发事件
        _test.Size = 10;
    }

    private void PropertyChanged(object sender, PropertyChangedEventArgs args)
    {
        switch (args.PropertyName)
        {
            case "Size":
                txtbox.Text = "some text";
                // 其他自定义逻辑
                break;
        }
    }
}

可选优化点(ValueChange类)

你已经给OnPropertyRaised方法加了[CallerMemberName]特性,Size属性的set方法里不需要手动传属性名,直接调用OnPropertyRaised()即可,特性会自动获取调用方的属性名,后续改属性名也不需要手动修改传参:

public int Size
{
    get
    {
        return _size;
    }
    set
    {
        _size = value;
        // 不需要手动传"Size"参数
        OnPropertyRaised();
    }
}

内容的提问来源于stack exchange,提问作者Masterus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:45:03