首页 >后端开发 >C++ >如何在 C# 中属性值更改时引发自定义事件?

如何在 C# 中属性值更改时引发自定义事件?

Linda Hamilton
Linda Hamilton原创
2025-01-01 01:16:10985浏览

How to Raise a Custom Event When a Property Value Changes in C#?

如何在属性值更改时引发事件

您想要一个名为 ImageFullPath1 的属性每当其值发生变化时引发一个事件。虽然您知道使用 INotifyPropertyChanged 接口,但您更喜欢利用事件来实现此目的。

INotifyPropertyChanged 接口实际上是通过事件实现的。它有一个成员,PropertyChanged,这是一个可以由消费者订阅的事件。

安全实现:

以下代码代码片段演示了 INotifyPropertyChanged 接口的安全实现,以及特定属性的附加事件(ImageFullPath):

public class MyClass : INotifyPropertyChanged
{
    private string imageFullPath;

    protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, e);
    }

    protected void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

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

    protected void OnImageFullPathChanged(EventArgs e)
    {
        EventHandler handler = ImageFullPathChanged;
        if (handler != null)
            handler(this, e);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public event EventHandler ImageFullPathChanged;
}

此实现确保以下内容:

  • 抽象属性更改通知方法,以便轻松应用于其他属性
  • 复制 PropertyChanged 委托在调用它之前避免竞争条件
  • 正确实现INotifyPropertyChanged 接口

.NET 4.5 中的 CallerMemberAttribute:

对于 .NET 4.5 及更高版本,CallerMemberAttribute可用于消除硬编码字符串源代码中的属性名称:

protected void OnPropertyChanged(
    [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
    OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}

public string ImageFullPath
{
    get { return imageFullPath; }
    set
    {
        if (value != imageFullPath)
        {
            imageFullPath = value;
            OnPropertyChanged();
        }
    }
}

以上是如何在 C# 中属性值更改时引发自定义事件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn