Связывание двух наблюдаемых коллекций друг с другом - PullRequest
3 голосов
/ 10 ноября 2010

У меня есть два свойства типа 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 затем привязывается к элементу Items ComboBox.

Таким образом, это работает правильно, значения, присутствующие в firstCollProperty, отображаются правильно в выпадающем списке; но если в firstCollProperty вносятся некоторые изменения во время выполнения, то они не отражаются в ComboBox! (добавление новых элементов или создание нового объекта коллекции).

Изменения корректно отражаются после обновления привязки (снова выполняется вышеуказанный код).

Мой вопрос - Если две ObservableCollections связаны друг с другом, почему какие-либо изменения первого не отражаются в другом? , но то же самое работает для свойств типа string или double.

Есть ли способ достичь этого?

1 Ответ

0 голосов
/ 10 февраля 2011

Просто прошёл несколько старых вопросов без ответа и увидел это. Несомненно, вы уже нашли обходной путь, но я рекомендую для этого посмотреть что-то вроде CLinq, Bindable Linq или Obtics. См. этот вопрос для более подробной информации. Вы берете первую коллекцию, создаете динамический запрос к ней и выставляете этот динамический запрос (который реализует IObservableCollection) в качестве второго свойства.

...