我的大脑陷入困境,试图解决我已经陷入困境的问题,并且一些帮助会有很长的路要走。
我有一个从WCF服务下载数据结构的应用程序,数据存储在一个可观察的集合属性中。我有一个包含网格的用户控件,并且绑定在用户控件initilizer上或通过x:Static
数据绑定。用户控件或可观察集合属性可以在同一台机器上访问多次。
如果我打开多个用户控件实例并使用网格修改记录,我将更改发送到WCF服务,该服务修改SQL数据库向修改后的对象添加几位并将其传递回WPF(也许在未来通过回发的其他客户端应用程序)应用程序和网格更新。但是它只更新那个特定的usercontrols网格。
如果我强制其他用户控制网格重新绑定,则反映数据更改,这不是我想要的。所以我决定使用LINQ在observable集合中找到要修改的对象,然后添加然后使用IList.IndexOf
将对象插入集合到它在集合中的位置并删除旧对象。做这个方法看起来确实很好,但我一直在读,有一个更好的方法来实现这一点。
任何人都可以帮助阐明我想要实现的目标,或者是我已经完成通知所有绑定网格的方式,即做出改变是正确的/只有这样做我的所有属性都实现inotifypropertychanged on the values。 / p>
提前致谢
答案 0 :(得分:1)
该集合由wcf服务创建,并移交给静态类以提供对它的访问。网格绑定到此静态类。
根据你的评论,我必须重写我的anser:
您有一个网格绑定的静态属性。如果为此属性分配新集合,则网格仍然绑定到旧网格,因此它们不会更新,因为从他们的角度来看没有任何更改。
如果您更改了集合中的一个项目,则更改了项目而不是集合。所以绑定的网格不会更新,因为从这个角度来看没有任何改变。
如果要更新网格,则必须在添加所有集合项目时注册ChangedEvent-Handler。每次调用此处理程序时,因为您更改了集合中的一个项目,您必须触发网格更新。
这通常由包装集合(模型)的视图模型完成。然后,网格绑定到此视图模型,该模型负责通知网格(视图)任何更改。看看MVVM设计模式,它将为您提供解决问题的标准方法。