【问题标题】:CollectionChanged event intercepted by POCO proxyPOCO 代理拦截的 CollectionChanged 事件
【发布时间】:2011-03-10 19:02:45
【问题描述】:

我有一个 WPF ListBox,其 ItemsSource 绑定到 Entity Framework 4 POCO 代理上的 ObservableCollection 导航属性。我希望用户能够在列表中添加和删除项目,然后通过单击 [保存] 按钮提交这些更改。

它主要工作,但列表框不显示添加的项目,直到 ObjectContext.CommitChanges() 被调用。似乎 POCO 代理正在拦截 Action.Add 操作的事件,然后在提交时重新引发它或者可能是 Action.Reset 事件。

有谁知道是不是这样。获得所需行为的任​​何可能的解决方法?

【问题讨论】:

  • 如果这是一个 POCO 类,POCO 的意思是“普通的旧 CLR 对象”,所以它应该只做你编程它要做的事情。 POCO 背后的想法是您使用自己的类而不是一些“生成的”代理。不是这样吗?
  • 我相信“POCO 代理”是描述 Entity Framework 4 的 POCO 实体类的 DynamicProxy 子类的常用术语,这是我的情况。

标签: entity-framework proxy navigation poco observablecollection


【解决方案1】:

很可能是别的东西;如果在基础上,该属性是一个实现 INotifyCollectionChanged 的​​集合,那么没有什么可以阻止任何人订阅该事件(它不像路由事件或任何东西)。根据我的经验,至少在运行时生成的代理属性从来没有遇到过问题。看看你的集合是如何初始化的,然后仔细检查你的绑定,我会说。

【讨论】:

  • 我很确定这不是绑定或刷新问题。我会更多地研究它;也许写一些代码来吐出动态代理的 dll 以便我可以通过反射器运行它。
  • 只是为了确保 - 添加项目时,您确实将它们添加到实际的集合属性中,对吗?并且不通过其他机制将它们关联起来?我认识的人不久前做了类似的事情,他的收藏属性没有更新,因为没有修复,但这是因为(糟糕的)定制的 t4 模板比其他任何事情都重要。
  • 是的,我正在直接添加。我在反光镜里看着它。在给委托一个初始化它的机会之后,被覆盖的属性总是返回基属性。我没有看到委托的实现,它可能会做一些偷偷摸摸的事情,但你是对的,它更有可能是其他事情。
  • 好吧,我觉得很傻!项目 DataTemplate 中的绑定是到未初始化的导航属性的属性。 ListBoxItems 被添加,他们只是没有显示。我真的需要先开始寻找最简单的答案。
猜你喜欢
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2021-06-27
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多