更新WPF / WCF应用程序中的多个数据绑定用户控件

时间:2011-08-17 12:51:08

标签: wpf wcf observablecollection inotifypropertychanged

我的大脑陷入困境,试图解决我已经陷入困境的问题,并且一些帮助会有很长的路要走。

我有一个从WCF服务下载数据结构的应用程序,数据存储在一个可观察的集合属性中。我有一个包含网格的用户控件,并且绑定在用户控件initilizer上或通过x:Static数据绑定。用户控件或可观察集合属性可以在同一台机器上访问多次。

如果我打开多个用户控件实例并使用网格修改记录,我将更改发送到WCF服务,该服务修改SQL数据库向修改后的对象添加几位并将其传递回WPF(也许在未来通过回发的其他客户端应用程序)应用程序和网格更新。但是它只更新那个特定的usercontrols网格。

如果我强制其他用户控制网格重新绑定,则反映数据更改,这不是我想要的。所以我决定使用LINQ在observable集合中找到要修改的对象,然后添加然后使用IList.IndexOf将对象插入集合到它在集合中的位置并删除旧对象。做这个方法看起来确实很好,但我一直在读,有一个更好的方法来实现这一点。

任何人都可以帮助阐明我想要实现的目标,或者是我已经完成通知所有绑定网格的方式,即做出改变是正确的/只有这样做我的所有属性都实现inotifypropertychanged on the values。 / p>

提前致谢

1 个答案:

答案 0 :(得分:1)

该集合由wcf服务创建,并移交给静态类以提供对它的访问。网格绑定到此静态类。

根据你的评论,我必须重写我的anser:

您有一个网格绑定的静态属性。如果为此属性分配新集合,则网格仍然绑定到旧网格,因此它们不会更新,因为从他们的角度来看没有任何更改。

如果您更改了集合中的一个项目,则更改了项目而不是集合。所以绑定的网格不会更新,因为从这个角度来看没有任何改变。

如果要更新网格,则必须在添加所有集合项目时注册ChangedEvent-Handler。每次调用此处理程序时,因为您更改了集合中的一个项目,您必须触发网格更新。

这通常由包装集合(模型)的视图模型完成。然后,网格绑定到此视图模型,该模型负责通知网格(视图)任何更改。看看MVVM设计模式,它将为您提供解决问题的标准方法。