【发布时间】:2011-05-07 18:55:09
【问题描述】:
我有两个ObservableCollection<string> 类型的属性(在不同的项目中);我想要做的是像这样使用反射和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 中的值在组合框中正确显示;但如果在运行时对 firstCollProperty 进行了一些更改,则它们不会反映在 ComboBox 中!(添加新项目或创建新集合对象)。
刷新绑定后更改会正确反映(再次执行上述代码)。
我的问题是 - 如果两个 ObservableCollections 绑定在一起,为什么第一个的任何更改都不会反映在其他的?但同样的事情适用于字符串或双精度类型的属性。
有什么方法可以实现吗?
【问题讨论】:
-
有什么想法吗?如果我的问题不清楚或没有意义,请告诉我?
-
你的问题有点奇怪,因为我看不出有什么理由绑定两个集合。为什么不在两个地方使用同一个集合?
-
@robertos:谢谢你的提问,我的场景由一个属性网格(PG)和一个设计器(单独的项目)组成,在设计器中我有一个对象,其属性需要在 PG 中显示;该对象的一个(或多个)属性属于集合类型,PG 将通过反射获取该属性并将其绑定到集合类型的本地属性(存在于特定属性 Item 中)。由于 PG 仅具有此属性的名称(可能会有所不同),因此它需要另一个集合类型的本地属性来进行绑定。
-
虽然我会尝试获取PG中的属性值并直接绑定;感谢您指出这一点。
标签: wpf silverlight data-binding reflection observablecollection