PropertyChangedEventManager:AddHandler 与 AddListener

swift

1个回答

写回答

菜梨

2025-07-09 15:45

+ 关注

AI
AI

PropertyChangedEventManager是一个用于处理属性更改事件的类。它提供了两个方法AddHandler和AddListener,用于注册属性更改事件的处理程序。这两个方法在使用上略有不同,下面将详细介绍它们的用法。

PropertyChangedEventManager.AddHandler方法

AddHandler方法用于为指定对象的属性注册属性更改事件的处理程序。它的语法如下:

csharp

public static void AddHandler(

INotifyPropertyChanged source,

PropertyChangedEventHandler handler,

string propertyName

)

其中,source参数是要注册事件的对象,它必须实现INotifyPropertyChanged接口;handler参数是事件的处理程序,它是一个委托类型PropertyChangedEventHandler;propertyName参数是要监视的属性的名称,当该属性的值发生更改时,将引发属性更改事件。

下面是一个使用AddHandler方法的示例代码:

csharp

public class Person : INotifyPropertyChanged

{

private string name;

public string Name

{

get { return name; }

set

{

if (name != value)

{

name = value;

OnPropertyChanged(nameof(Name));

}

}

}

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)

{

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

}

}

public class Program

{

public static void MAIn()

{

Person person = new Person();

PropertyChangedEventManager.AddHandler(person, HandleNameChanged, nameof(Person.Name));

person.Name = "John";

}

private static void HandleNameChanged(object sender, PropertyChangedEventArgs e)

{

if (e.PropertyName == nameof(Person.Name))

{

Console.WriteLine("Name changed!");

}

}

}

在上面的示例中,我们创建了一个Person类,它实现了INotifyPropertyChanged接口,并在Name属性的setter方法中调用了OnPropertyChanged方法来引发属性更改事件。然后,我们使用PropertyChangedEventManager.AddHandler方法为Person对象的Name属性注册了一个处理程序HandleNameChanged。当Name属性的值发生更改时,HandleNameChanged方法将被调用。

PropertyChangedEventManager.AddListener方法

AddListener方法用于为指定对象的属性注册属性更改事件的监听器。它的语法如下:

csharp

public static void AddListener(

INotifyPropertyChanged source,

IWeakEventListener listener,

string propertyName

)

其中,source参数是要注册事件的对象,它必须实现INotifyPropertyChanged接口;listener参数是事件的监听器,它必须实现IWeakEventListener接口;propertyName参数是要监视的属性的名称,当该属性的值发生更改时,将通知监听器。

下面是一个使用AddListener方法的示例代码:

csharp

public class Person : INotifyPropertyChanged

{

private string name;

public string Name

{

get { return name; }

set

{

if (name != value)

{

name = value;

OnPropertyChanged(nameof(Name));

}

}

}

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)

{

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

}

}

public class NameChangedListener : IWeakEventListener

{

public bool ReceiveWeakEvent(Type managerType, object sender, EventArgs e)

{

if (managerType == typeof(PropertyChangedEventManager) && e is PropertyChangedEventArgs args)

{

if (args.PropertyName == nameof(Person.Name))

{

Console.WriteLine("Name changed!");

}

}

return true;

}

}

public class Program

{

public static void MAIn()

{

Person person = new Person();

PropertyChangedEventManager.AddListener(person, new NameChangedListener(), nameof(Person.Name));

person.Name = "John";

}

}

在上面的示例中,我们创建了一个Person类和一个NameChangedListener类,它们分别实现了INotifyPropertyChanged和IWeakEventListener接口。在Person类中,我们同样在Name属性的setter方法中调用了OnPropertyChanged方法来引发属性更改事件。然后,我们使用PropertyChangedEventManager.AddListener方法为Person对象的Name属性注册了一个监听器NameChangedListener。当Name属性的值发生更改时,NameChangedListener的ReceiveWeakEvent方法将被调用。

PropertyChangedEventManager类提供了AddHandler和AddListener两个方法,用于注册属性更改事件的处理程序和监听器。通过使用这些方法,我们可以方便地对属性的更改进行响应,并执行相应的操作。无论是使用AddHandler还是AddListener,都可以根据实际需求选择合适的方式来处理属性更改事件。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号