静态AOP Fody PropertyChanged
GitHub: https://github.com/Fody/PropertyChanged
nuget: Install-Package PropertyChanged.Fody
class Program
{
static void Main(string[] args)
{
//第一种
Person person = new Person();
((INotifyPropertyChanged)person).PropertyChanged += Person_PropertyChanged;
person.GivenNames = "test";
//第二种
Person1 person1 = new Person1();
((INotifyPropertyChanged)person1).PropertyChanged += Person_PropertyChanged;
person1.GivenNames = "test1";
Console.Read();
}
private static void Person_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Console.WriteLine("PropertyName:{0}", e.PropertyName);
}
}
public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string GivenNames { get; set; }
public string FamilyName { get; set; }
[DoNotNotify]
public string FullName
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}
}
[ImplementPropertyChanged]
public class Person1
{
public string GivenNames { get; set; }
public string FamilyName { get; set; }
[DoNotNotify]
public string FullName
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}
}
Person_PropertyChanged能捕获到改变属性事件
底层属性绑定是IL静态绑定
在类上边写上一个Attribute [ImplementPropertyChanged],类里的所有属性就都实现了属性通知事件
DoNotNotify:如果有某个属性不想实现通知事件,就在相应属性上加个[DoNotNotify]
AlsoNotifyFor:
如果有某个属性像上边的FullName一样是2个属性的组合,任何一个变化都要通知都FullName变化,就在子属性GivenNames 和FamilyName上加个[AlsoNotifyFor("FullName")]
DependsOn:
如果反过来FullName变了也让子属性变化,那就要在FullName上加上[DependsOn("GivenName","FamilyName")]
DoNotSetChanged:这个属性是说当FullName 的Set改变时,不会通知到子属性
DoNotCheckEquality:这个属性是说跳过相等的检查,