是否可以使用类似于 auto-属性 ({ get; set; }) 的语法来声明引发 PropertyChanged 事件的 属性?
Is it possible to declare a property raising PropertyChanged event using a syntax similar to an auto-property ({ get; set; })?
我想知道在必须引发 PropertyChanged
事件时如何简化属性的使用。我的意思是,只要您需要引发事件,setter 就必须这样做,因此 属性 不能是自动 属性。这会导致代码的一些复杂性,尤其是当涉及多个属性时,除了简单地引发事件之外没有其他目的:
protected FlowDocument document;
protected bool hyphenation = true;
protected bool optimalParagraphs = true;
public event PropertyChangedEventHandler PropertyChanged;
public FlowDocument Document { get => document; set { document = value; RaisePropertyChanged (); } }
public bool Hyphenation { get => hyphenation; set { hyphenation = value; RaisePropertyChanged (); } }
public bool OptimalParagraphs { get => optimalParagraphs; set { optimalParagraphs = value; RaisePropertyChanged (); } }
// Raise event
protected void RaisePropertyChanged ([CallerMemberName] string propertyName = null) {
PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
}
复杂性在这部分,每个 属性:
protected FlowDocument document;
public FlowDocument Document { get => document; set { document = value; RaisePropertyChanged (); } }
因为没有可能这样表达:
public FlowDocument Document { get; setAndRaiseEvent; }
网站上的搜索提出了这个类似但不重复的问题:
- Is it possible to use attributes to automatically raise an event on a property change
以目前的 C# 可能性,有没有办法简化原始代码? (我正在扩大任何可能性的范围)。
我想知道在必须引发 PropertyChanged
事件时如何简化属性的使用。我的意思是,只要您需要引发事件,setter 就必须这样做,因此 属性 不能是自动 属性。这会导致代码的一些复杂性,尤其是当涉及多个属性时,除了简单地引发事件之外没有其他目的:
protected FlowDocument document;
protected bool hyphenation = true;
protected bool optimalParagraphs = true;
public event PropertyChangedEventHandler PropertyChanged;
public FlowDocument Document { get => document; set { document = value; RaisePropertyChanged (); } }
public bool Hyphenation { get => hyphenation; set { hyphenation = value; RaisePropertyChanged (); } }
public bool OptimalParagraphs { get => optimalParagraphs; set { optimalParagraphs = value; RaisePropertyChanged (); } }
// Raise event
protected void RaisePropertyChanged ([CallerMemberName] string propertyName = null) {
PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
}
复杂性在这部分,每个 属性:
protected FlowDocument document;
public FlowDocument Document { get => document; set { document = value; RaisePropertyChanged (); } }
因为没有可能这样表达:
public FlowDocument Document { get; setAndRaiseEvent; }
网站上的搜索提出了这个类似但不重复的问题:
- Is it possible to use attributes to automatically raise an event on a property change
以目前的 C# 可能性,有没有办法简化原始代码? (我正在扩大任何可能性的范围)。