Мне интересно, как упростить использование свойств, когда они должны вызывать событие PropertyChanged
. Я имею в виду, что как только вам нужно вызвать событие, сеттер должен это сделать, поэтому свойство не может быть авто-свойством. Это приводит к некоторому усложнению кода, особенно когда речь идет о нескольких свойствах, ни с какой другой целью, кроме как просто вызвать событие:
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; }
Поиск на сайте предлагает этот похожий, но не дублирующий вопрос:
При существующих возможностях C # есть ли способ упростить исходный код? (Я расширяю возможности до любой возможности).