WPF中的INotifyPropertyChanged接口

INotifyPropertyChanged 是一个在 WPF (Windows Presentation Foundation) 和 .NET 中使用的接口,它用于实现数据绑定时的数据更新通知。当实现了 INotifyPropertyChanged 接口的类的属性值发生变化时,这个接口允许对象通知绑定到该对象属性的 UI 元素,以便 UI 元素可以更新其显示的内容。

接口定义

INotifyPropertyChanged 接口定义如下:

cs 复制代码
public interface INotifyPropertyChanged
{
    event PropertyChangedEventHandler PropertyChanged;
}

事件处理

  • PropertyChanged :这是一个事件,当实现类的属性值发生变化时,需要触发这个事件。PropertyChangedEventHandler 是一个委托,它指向一个方法,该方法接收两个参数:发送事件的对象(通常是属性发生变化的对象本身)和一个 PropertyChangedEventArgs 对象,后者包含发生变化的属性的名称。

实现 INotifyPropertyChanged

要实现 INotifyPropertyChanged,你需要在你的类中声明 PropertyChanged 事件,并在属性的 set 访问器中触发这个事件。以下是一个简单的实现示例:

cs 复制代码
public class Person : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

使用 INotifyPropertyChanged

当你的数据对象实现了 INotifyPropertyChanged 接口后,你可以在 WPF 中使用数据绑定,将 UI 元素绑定到这些对象的属性上。当属性值发生变化时,UI 会自动更新以反映新的值。

XML 复制代码
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />

在这个 XAML 代码中,TextBoxText 属性被绑定到了 Person 对象的 Name 属性上。由于 Name 属性的 set 访问器中触发了 PropertyChanged 事件,所以每当 Name 发生变化时,TextBox 都会更新其显示的内容。

INotifyPropertyChanged 是实现响应式 UI 和数据绑定的关键组件,它确保了 UI 和数据之间的同步更新。

相关推荐
心平气和量大福大18 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
FuckPatience1 天前
Telerik UI for WPF 值不能为null。参数名:key
ui·wpf
lindexi1 天前
WPF 笔迹延迟优化从硬件到软件的全链路分析
wpf
weixin_727535622 天前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf
liuxiaowei32 天前
Winform+WPF双框架实战:喷涂工艺SCADA上位机从0到1搭建(附采集监控源码+车间踩坑实录)
大数据·hadoop·wpf
贺国亚3 天前
模型训练-分布式与GPU调度
分布式·wpf
不羁的木木4 天前
HarmonyOS技术精讲-Connectivity Kit:实战——多屏协同与文件快传应用
华为·wpf·harmonyos
某不知名網友4 天前
C++ 从零实现负载均衡式在线 OJ 判题系统|分布式沙箱判题实战
wpf
fogota4 天前
【AI】C# .NET8 WPF 第三方DLL引用配置(编译不丢失、不自动删除)
c#·.net·wpf·dll
不羁的木木4 天前
HarmonyOS技术精讲-Connectivity Kit(短距通信服务):初识统一短距通信框架
华为·wpf·harmonyos