绑定两个可观察集合

问题描述:

我有ObservableCollection类型的两个属性(在单独的项目中);我想要做的就是使用反射和SetBinding像这样绑定这两个 - 然后绑定两个可观察集合

//Get the PropertyDescriptor for first collection property 
PropertyDescriptor relatedPropertyDesc = prop.Find(firstCollPropName, false); 
Binding relatedPropBinding = new Binding(relatedPropertyDesc.Name); 
relatedPropBinding.Source = this.SelectedItem; 
relatedPropBinding.Mode = BindingMode.TwoWay; 
//Bind the second collection property using binding created above 
propItem.SetBinding(MyItem.SecondCollProperty, relatedPropBinding); 

这SecondCollProperty被绑定到一个组合框的的ItemsSource。

因为这样可以正常工作,所以firstCollProperty中的值在ComboBox中正确显示;但如果在运行时在firstCollProperty中进行了一些更改,则那么它们不会反映在ComboBox中!(添加新项目或创建新的集合对象)。

更新在刷新绑定(再次执行上面的代码)后正确反映。

我的问题是 - 如果两个ObservableCollections绑定在一起,为什么在第一个任何更改不会反映在其他?但同样的东西适用于字符串或双重类型的属性。

有没有办法达到这个目的?

+0

任何想法?让我知道如果我的问题不清楚或没有意义? – akjoshi 2010-11-11 11:08:02

+0

你的问题有点奇怪,因为我看不到任何理由绑定两个集合。为什么不在这两个地方使用同一个系列? – robertos 2010-11-12 09:44:36

+0

@robertos:谢谢你的提问,我的场景由一个属性网格(PG)和一个设计器(单独的项目)组成,在设计器中我有一个对象,其属性需要在PG中显示;该对象的一个​​(或多个)属性是集合类型的,PG将通过反射来获取并将其绑定到集合类型的本地属性(存在于特定属性Item中)。由于PG只是具有此属性的名称(可能会有所不同),因此它需要另一个集合类型的本地属性以用于绑定目的。 – akjoshi 2010-11-12 11:50:08

刚刚通过一些旧的未解答的问题,看到了这一点。毫无疑问,现在你已经提出了一个解决方法,但是我的建议是针对CLinq,Bindable Linq或Obtics这样的东西进行研究。有关更多详细信息,请参阅this question。您将获取第一个集合,根据它创建动态查询,并将该动态查询(实现IObservableCollection)公开为第二个属性。

+0

在Nuget/Github上有一个叫OLinq的不错的游戏 – mcintyre321 2013-12-18 12:47:06