使用反射来获取INotifyPropertyChanged通知的属性的实际值?

时间:2013-12-25 07:22:47

标签: c# reflection inotifypropertychanged

我正在开发一个项目,该项目将使用INotifyPropertyChanged来宣布对订阅者类的属性更改。

void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "Quantity")
....

在我看来,当订阅类收到通知时,它可以获得的唯一可用值是属性的名称。有没有办法获得具有属性更改的实际对象的引用?然后我可以从引用中获取此属性的新值。也许使用反射?

有人会介意编写代码片段来帮助我吗?非常感谢。

2 个答案:

答案 0 :(得分:10)

实际对象是sender(至少应该是):

void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    var propertyValue = sender.GetType().GetProperty(e.PropertyName).GetValue(sender);
}

如果您关心效果,请缓存sender.GetType().GetProperty(e.PropertyName)结果。

答案 1 :(得分:10)

注意:此接口主要是数据绑定API,数据绑定不仅限于像反射这样的简单模型。因此,我建议您使用TypeDescriptor API。这将允许您正确检测简单和复杂模型的更改:

var prop = TypeDescriptor.GetProperties(sender)[e.PropertyName];
if(prop != null) {
    object val = prop.GetValue(sender);
    //...
}

(使用using System.ComponentModel;指令)