代码之家  ›  专栏  ›  技术社区  ›  Chen Kinnrot

在WPF上更改了Castle动态代理和inotifyproperty

  •  3
  • Chen Kinnrot  · 技术社区  · 14 年前

    我使用Castle DP用代理包装我的实体,我的实体自己实现INotifyPropertyChanged。并在调用set时引发事件。

    我在包装上编写了一些单元测试,以查看当我通过代理操作实体时触发propertychanged事件,这些实体都被传递了。

    问题是在一个有屏幕的实际应用程序上,当我将屏幕绑定到一个实际上是DP的属性时,屏幕以不同的方式注册到属性,除非我在拦截器代码中实现注册管理,否则它不会工作

    为什么会出现这种行为,当注册到属性更改时,wpf对我不需要的属性做了什么?

    3 回复  |  直到 14 年前
        1
  •  1
  •   tolism7    12 年前

    在城堡AOP有一个重要的事情要记住-的 Equals

    看这里: RRSL-Lite.EntityAOP Here 是如何使用它的简单示例。

        2
  •  0
  •   Chris Woodward    14 年前

    作为接口代理生成的代理类将具有属性的显式接口实现,并且WPF绑定将无法工作,除非它显式匹配。

    {Binding Path=(local:IEntity.ID)} instead of just {Binding ID}
    

    或者对视图模型/实体使用虚拟方法代理,并使截获的任何方法成为虚拟方法。

        3
  •  0
  •   Jack Ukleja    8 年前

    这可能是因为你正在包装你的衣服 实体 和Castle的 CreateInterfaceProxyWithTarget 方法或类似方法。如果你依靠你的 实体 实施INPC并转发您的 PropertyChanged 事件挂钩到底层代理目标,在 已更改属性 事件在 sender 将是你的 实体 不是你的 代理 . 如果您试图在WPF中绑定代理,那么 发件人 成为 代理 . 否则,它将忽略更改。解决方案是拦截事件并确保设置 发件人 成为你的 代理 .