C# 【WPF】之 INotifyPropertyChanged的简单封装

以下是一个简单的 INotifyPropertyChanged 封装示例:

csharp 复制代码
using System.ComponentModel;
c#兼职Q群:741058172
public class ObservableObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
  protected void RaisePropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    protected bool SetProperty<T>(ref T storage, T value, string propertyName = null)
    {
        if (Equals(storage, value))
        {
            return false;
        }

        storage = value;
        RaisePropertyChanged(propertyName);
        return true;
    }
}

使用这个封装,你可以在你的 ViewModel 类中继承 ObservableObject 类,以获得 INotifyPropertyChanged 的支持。你只需要在定义属性时使用 SetProperty 方法来设置属性,如下所示:

csharp 复制代码
private string _name;
public string Name
{
    get => _name;
    set => SetProperty(ref _name, value, nameof(Name));
}

这会自动触发 PropertyChanged 事件并通知视图更新。

如果UI界面属性的值是你自身属性名称,那么可以再简化下:

csharp 复制代码
public class NotifyPropertyChangedBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void RaisePropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
csharp 复制代码
  public class  ClassA:NotifyPropertyChangedBase
    {
        private int myVar;

        public int MyProperty
        {
            get { return myVar; }
            set
            {
                if (myVar != value)
                {
                    myVar = value;
                    RaisePropertyChanged();//注意这里可以省略属性名称
                }
            }
        }
        
    }

参考

相关推荐
听麟2 天前
HarmonyOS 6.0+ 跨端会议助手APP开发实战:多设备接续与智能纪要全流程落地
分布式·深度学习·华为·区块链·wpf·harmonyos
@hdd2 天前
Kubernetes 可观测性:Prometheus 监控、日志采集与告警
云原生·kubernetes·wpf·prometheus
zls3653653 天前
C# WPF canvas中绘制缺陷分布map
开发语言·c#·wpf
专注VB编程开发20年3 天前
c#Redis扣款锁的设计,多用户,多台电脑操作
wpf
闲人编程3 天前
定时任务与周期性调度
分布式·python·wpf·调度·cron·定时人物·周期性
zls3653654 天前
C# WPF canvas中绘制缺陷分布map并实现缩放
开发语言·c#·wpf
数据知道5 天前
PostgreSQL:Citus 分布式拓展,水平分片,支持海量数据与高并发
分布式·postgresql·wpf
闲人编程5 天前
Redis分布式锁实现
redis·分布式·wpf·进程··死锁·readlock
之歆5 天前
ZooKeeper 分布式协调服务完全指南
分布式·zookeeper·wpf
sdff113967 天前
【HarmonyOS】鸿蒙Flutter跨设备流转技术实战指南
flutter·wpf·harmonyos