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 和数据之间的同步更新。

相关推荐
猫林老师几秒前
鸿蒙元服务开发:免安装的卡片式服务(Atomic Service)
华为·wpf·harmonyos
mingupup16 小时前
WPF/C#:使用Microsoft Agent Framework框架创建一个带有审批功能的终端Agent
c#·wpf
△曉風殘月〆19 小时前
WPF中的变换(Transform)功能详解
wpf
mingupup19 小时前
为WPF应用增加项目图标
wpf
张人玉1 天前
c#WPF基础知识
开发语言·c#·wpf
yantuguiguziPGJ1 天前
WPF 联合 Web 开发调试流程梳理(基于 Microsoft.Web.WebView2)
前端·microsoft·wpf
Aevget1 天前
DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(二)
.net·wpf·界面控件·devexpress·ui开发·数据网格
大美B端工场-B端系统美颜师2 天前
工控软件开发选择难?Electron、Qt、WPF 对比
qt·electron·wpf
c#上位机2 天前
MefBootstrapper在Prism引导程序中的使用
c#·wpf·prism
没有bug.的程序员3 天前
服务治理与 API 网关:微服务流量管理的艺术
java·分布式·微服务·架构·wpf