C# 使用元数据获取对调用特定方法的类的引用
当使用INotifyPropertyChanged时,可以执行类似的操作来获取调用事件的方法所调用的属性的名称C# 使用元数据获取对调用特定方法的类的引用,c#,C#,当使用INotifyPropertyChanged时,可以执行类似的操作来获取调用事件的方法所调用的属性的名称 public void RaisePropertyChanged([CallerMemberName] string prop = "") { if (PropertyChanged != null) { PropertyChanged(new object(), new PropertyChangedEventArgs
public void RaisePropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
{
PropertyChanged(new object(), new PropertyChangedEventArgs(prop));
}
}
是否还有其他类型的属性可用于获取对包含该属性的类的引用?我希望能够从任何viewmodel类的任何属性调用RaisePropertyChanged。我所有的viewmodel类都是从一个基础派生的,所以我想我可以这样做
public void RaisePropertyChanged([CallerMemberName] string prop = "", [CallerClassRef] VmBase base = null)
{
if (PropertyChanged != null)
{
PropertyChanged(base, new PropertyChangedEventArgs(prop));
}
}
尝试使用外接程序。它帮助您将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));
}
}
}
源代码复制自:访问当前类引用的关键字称为: 无论您派生这个类多少次,这都是有效的,这个函数总是在这个实例上被调用的
public void RaisePropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}