有没有办法在自动属性集上调用方法?

时间:2018-03-05 10:56:31

标签: c# wpf methods properties

我正在WPF项目中的一些视图模型上实现INotifyPropertyChanged。为此,我需要始终声明INotifyPropertyChanged特定代码,如下例所示:

class ViewModel : INotifyPropertyChanged
{
    private bool _property;
    public event PropertyChangedEventHandler PropertyChanged;

    public bool Property
    {
        get { return _property; }
        set
        {
            _property = value;
            OnPropertyChanged("Property");
        }
    }


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

ViewModel专用的唯一代码是Property,而其他代码似乎只是噪音。我试图减少它,考虑到我不只有一个视图模型,并且将来会增加更多,通过这种方式在视图模型和INotifyPropertyChanged接口之间添加一个抽象类:

public abstract class NotifiableObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

现在所有的视图模型都变短了,例如:

class ViewModel : NotifiableObject
{
    private bool _property;

    public bool Property
    {
        get { return _property; }
        set
        {
            _property = value;
            NotifyPropertyChanged(nameof(Property));
        }
    }
}

现在对于我要添加的每个属性,我将无法使用自动属性,但是我必须保留一个支持的字段并始终在setter上,我将不得不调用NotifyPropertyChanged方法。我正在寻找一种方法来避免这种情况,并进一步减少我的代码:

class ViewModel : NotifiableObject
{
    [NotifiableProperty]
    public bool Property { get; set; }
}

我不是特别关注自it has been asked before以来与WPF或related to C# in general相关的属性,而是以任何方式解决此问题。

我知道代码现在更短了,但将来这会对应用程序的可读性产生很大影响。任何改进建议都表示赞赏。

谢谢!

0 个答案:

没有答案