【发布时间】:2017-04-30 12:06:30
【问题描述】:
在我的场景中,每次更改属性时,我都想触发 OnPropertyChanged 事件
是否可以编写一个自动执行此操作的基本 ViewModel,也许在属性值更改时传递 nameof(property)?
提前致谢。
【问题讨论】:
标签: c# mvvm xamarin xamarin.forms viewmodel
在我的场景中,每次更改属性时,我都想触发 OnPropertyChanged 事件
是否可以编写一个自动执行此操作的基本 ViewModel,也许在属性值更改时传递 nameof(property)?
提前致谢。
【问题讨论】:
标签: c# mvvm xamarin xamarin.forms viewmodel
是否可以在不编写代码的情况下触发PropertyChanged 事件? 是的,尽管您必须使用将调用注入称为 Fody 的第 3 方库。您可以在以下位置找到它:https://github.com/Fody/PropertyChanged
如果你愿意写一个小代码,你可以把它放在你的基类中(C#6 代表?。你需要System.Runtime.CompilerServices 代表CallerMemberName):
protected void OnPropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventargs(propertyName));
}
所以在你的属性设置器中你只是放了
set
{
backingField = value;
OnPropertyChanged();
}
【讨论】:
?.Invoke 是使用 C# 6 引发事件的首选方式。更具体地说,?。如果左侧参数为 null,则导致表达式返回 null;这意味着它之后的任何代码都不会执行。
Fody 允许您使用属性来连接 INotifyPropertyChanged,而不必在每个 setter 中显式调用它。
[ImplementPropertyChanged]
public class Person
{
public string GivenNames { get; set; }
public string FamilyName { get; set; }
}
【讨论】: