3

我有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

回答

0

剛剛通過一些舊的未解答的問題,看到了這一點。毫無疑問,現在你已經提出了一個解決方法,但是我的建議是針對CLinq,Bindable Linq或Obtics這樣的東西進行研究。有關更多詳細信息,請參閱this question。您將獲取第一個集合,根據它創建動態查詢,並將該動態查詢(實現IObservableCollection)公開爲第二個屬性。

+0

在Nuget/Github上有一個叫OLinq的不錯的遊戲 – mcintyre321 2013-12-18 12:47:06