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

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

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 方法来设置属性,如下所示:

private string _name;
public string Name
{
   
    get => _name;
    set => SetProperty(ref _name, value, nameof(Name));
}

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

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

public class NotifyPropertyChangedBase : INotifyPropertyChanged
    {
   
        public event PropertyChangedEventHandler PropertyChanged;

        public void RaisePropertyChanged([CallerMemberName] string propertyName = "")
        {
   
            if (PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

  public class  ClassA:NotifyPropertyChangedBase
    {
   
        private int myVar;

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

参考

相关推荐

  1. C# 【WPF】 INotifyPropertyChanged简单封装

    2024-02-13 11:38:01       42 阅读
  2. axios简单封装即使用

    2024-02-13 11:38:01       42 阅读
  3. wpf INotifyPropertyChanged

    2024-02-13 11:38:01       10 阅读
  4. WPF中 INotifyPropertyChanged

    2024-02-13 11:38:01       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-13 11:38:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-13 11:38:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-13 11:38:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-13 11:38:01       20 阅读

热门阅读

  1. Android录音功能的实现及踩坑记录

    2024-02-13 11:38:01       32 阅读
  2. [日常使用] Shell常用命令

    2024-02-13 11:38:01       29 阅读
  3. STM32自学☞PWM驱动舵机(按键控制)

    2024-02-13 11:38:01       30 阅读
  4. Rust语言之哈希表

    2024-02-13 11:38:01       36 阅读
  5. stream流中distinct方法重写equals相关

    2024-02-13 11:38:01       30 阅读
  6. 速盾cdn:香港服务器如何用国内cdn

    2024-02-13 11:38:01       29 阅读
  7. Android 9.0 禁用adb install 安装app功能

    2024-02-13 11:38:01       31 阅读
  8. Python中Pymysql库的常见用法和代码示例

    2024-02-13 11:38:01       38 阅读