首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用类似于auto属性({ get;set;})的语法声明引发PropertyChanged事件的属性?

是否可以使用类似于auto属性({ get;set;})的语法声明引发PropertyChanged事件的属性?
EN

Stack Overflow用户
提问于 2019-10-01 12:16:03
回答 1查看 143关注 0票数 1

当属性必须引发PropertyChanged事件时,我想知道如何简化它们的使用。我的意思是,一旦您需要引发事件,setter就必须这样做,因此该属性不能是自动属性。这会使代码变得有些复杂,特别是在涉及多个属性的情况下,只为了简单地引发事件:

代码语言:javascript
复制
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));
}

复杂之处在本部分内,对每一项财产重复如下:

代码语言:javascript
复制
protected FlowDocument document;
public FlowDocument Document { get => document; set { document = value; RaisePropertyChanged (); } }

因为不可能以以下方式来表达:

代码语言:javascript
复制
public FlowDocument Document { get; setAndRaiseEvent; }

网站上的搜索提出了类似但不重复的问题:

根据当前的C#可能性,是否有一种方法可以简化原始代码?(我正在把范围扩大到任何可能性)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-01 13:10:32

“与当前的C#可能性”?不是的。

但是,如果您安装了FodyPropertyChanged.Fody NuGet包,并将一个名为"FodyWeavers.xml“的文件添加到您的项目中,其内容如下:

代码语言:javascript
复制
<Weavers>
    <PropertyChanged />
</Weavers>

.Fody将向生成项目时实现INotifyPropertyChanged的所有类的所有属性设置器中注入引发PropertyChanged事件的代码。

有关更多信息,请参考GitHub

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58184599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档