我正在开发一个项目,该项目将使用INotifyPropertyChanged
来宣布对订阅者类的属性更改。
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Quantity")
....
在我看来,当订阅类收到通知时,它可以获得的唯一可用值是属性的名称。有没有办法获得具有属性更改的实际对象的引用?然后我可以从引用中获取此属性的新值。也许使用反射?
有人会介意编写代码片段来帮助我吗?非常感谢。
答案 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;
指令)