使用元数据获取对调用某个方法的类的引用
本文关键字:方法 引用 调用 数据获取 | 更新日期: 2023-09-27 18:09:11
当使用INotifyPropertyChanged时,可以这样做以获取调用事件的方法所在的属性的名称。
public void RaisePropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
{
PropertyChanged(new object(), new PropertyChangedEventArgs(prop));
}
}
是否有其他类型的属性可以用来获取对包含该属性的类的引用?我希望能够从任何视图模型类的任何属性中调用RaisePropertyChanged()
。我所有的视图模型类都是从基类派生的,所以我认为我可以这样做。
public void RaisePropertyChanged([CallerMemberName] string prop = "", [CallerClassRef] VmBase base = null)
{
if (PropertyChanged != null)
{
PropertyChanged(base, new PropertyChangedEventArgs(prop));
}
}
访问当前类引用的关键字称为this
:
public void RaisePropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
无论你派生多少次这个类,this
总是这个函数被调用的实例。
尝试使用Fody - PropertyChanged add in。它帮助你注入INotifyPropertyChanged实现到IL代码。
源代码:
[ImplementPropertyChanged]
public class Person
{
public string GivenNames { get; set; }
public string FamilyName { get; set; }
public string FullName
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}
}
编译时
public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string givenNames;
public string GivenNames
{
get { return givenNames; }
set
{
if (value != givenNames)
{
givenNames = value;
OnPropertyChanged("GivenNames");
OnPropertyChanged("FullName");
}
}
}
string familyName;
public string FamilyName
{
get { return familyName; }
set
{
if (value != familyName)
{
familyName = value;
OnPropertyChanged("FamilyName");
OnPropertyChanged("FullName");
}
}
}
public string FullName
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}
public virtual void OnPropertyChanged(string propertyName)
{
var propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
源代码复制自:https://github.com/Fody/PropertyChanged