实现 INotifyPropertyChanged 时的属性获取器和设置器?

Mic*_*ael 5 .net c# inotifypropertychanged winforms

我正在尝试为很多类实现 INotifyPropertyChanged,并且每个类都有很多很多属性。我一直在关注此MSDN 文档以了解如何实现 INofifyPropertyChanged,但它们的说明在类具有许多属性的情况下似乎并不实用。

目前我的大部分属性都使用简写:

public DateTime? DateClosed { get; set; }
Run Code Online (Sandbox Code Playgroud)

但文档说我需要将以下内容添加到每个 setter 方法中:

// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("DateClosed");
Run Code Online (Sandbox Code Playgroud)

这意味着我需要为 get 方法声明一个主体,并声明私有变量来处理属性的实际获取和设置。像这样:

private DateTime? _dateOfIncident = null;
public DateTime? DateClosed
{
    get { return _dateOfIncident; }
    set
    {
        _dateOfIncident= value;
        // Call OnPropertyChanged whenever the property is updated
          OnPropertyChanged("DateClosed");
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道解决这个问题的方法吗?

Bar*_*art 5

可以轻松更改一些类来实现INotifyPropertyChanged。但是,既然您声明您有很多具有很多属性的类,那么手动甚至使用模板来完成此操作确实是一个负担。

您真正需要的是一个可以为您完成此操作的工具,因此我向您介绍Fody及其 NotifyPropertyChanged 插件。Fody 所做的就是在编译时在代码之间编织一些额外的代码。您唯一需要做的就是在要实现的类上添加一个属性INotifyPropertyChanged,其余的事情都会为您完成。

[ImplementPropertyChanged]
public class Person 
{        
    public string GivenNames { get; set; }
    public string FamilyName { get; set; }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)