在不使用字符串名称的情况下引发PropertyChanged事件,可以通过以下步骤实现:
public class MyPropertyChangedEventArgs<T> : PropertyChangedEventArgs
{
public MyPropertyChangedEventArgs(Expression<Func<T>> propertyExpression)
: base(GetPropertyName(propertyExpression))
{
}
private static string GetPropertyName(Expression<Func<T>> propertyExpression)
{
MemberExpression memberExpression = (MemberExpression)propertyExpression.Body;
return memberExpression.Member.Name;
}
}
private string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set
{
if (_myProperty != value)
{
_myProperty = value;
RaisePropertyChanged(() => MyProperty);
}
}
}
private void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
{
PropertyChanged?.Invoke(this, new MyPropertyChangedEventArgs<T>(propertyExpression));
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnMyPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(MyProperty))
{
// 处理MyProperty属性的更改
}
}
以上是一种在不使用字符串名称的情况下引发PropertyChanged事件的方法。通过自定义的MyPropertyChangedEventArgs类,可以使用Lambda表达式来表示属性的更改,从而避免了硬编码属性名称的问题。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云