2012-12-18 89 views
0

我敢肯定,我已經發現這個StackOverflow上,但我似乎並沒有足夠的智慧再次找到它WPF MVVM及親子組合框

我想做什麼(在使用MVVM WPF)是這樣的:

cmbSelectedAddressRegion: populated with the list of region 
cmbSelectedAddressCities: populated with the list of cities in that region 

cmbSelectedAddressRegion上的某個地區的用戶點擊在cmbSelectedAddressCities的項目應該是地區的城市只有

我有這樣

的XAML

當我點擊在cmbSelectedAddressRegion區域的cmbSelectedAddressCities正確填充

我也有一個VM vmCustomer有很多的DependencyProperties(在他們之中selectedAddressItemRegionselectedAddressIdCities) 當我選擇從主列表中的客戶(窗口中的另一個組合框包含客戶列表)我看到cmbSelectedAddressRegion正確顯示該區域,但我沒有在cmbSelectedAddressCities中看到任何內容。再次,如果我點擊cmbSelectedAddressRegioncmbSelectedAddressCities填充和當前選擇的城市(在vmCustomer)選擇

cmbSelectedAddressRegion.itemssource爲界(在隱藏文件波特)到ObservableCollection(of vmAddressRegion) 每個vmAddressRegion有,除其他DependencyProperties,一cities返回的屬性ObservableCollection(of vmAddressCities)

創建窗口時會填充ObservableCollection(of vmAddressRegion)。與此同時,對於ObservableCollection(of vmAddressRegion)ObservableCollection(of vmAddressCities)(的vmAddressRegion型)每個項目填充了對應的項目)

我希望我已經足夠清晰 任何建議如何解決上述問題(該cmbSelectedAddressCities不是「填充」)?

感謝您的任何幫助

+0

ÿ再次道歉我們的ViewModel不應該有DependencyProperties。 –

+0

爲什麼?也許我錯了嗎?我從這裏開始使用MVVM [link](http://community.visual-basic.it/alessandro/archive/2010/06/15/29563.aspx)。 – doGmaI

+0

你的鏈接是用意大利語寫的,所以我不能理解它的大部分內容(它也在VB中,這一點在這一點上傷害了我的眼睛只是爲了看看它),但從我看到的,他正在做'INotifyPropertyChanged' ViewModels,它不需要DependencyProperties –

回答

0

WPF組合框需要小心處理。如果ItemsSource和SelectedValue/SelectedItem以「錯誤」順序更改,綁定很容易混淆,特別是如果使用SelectedValue。

我的建議是將「SelectedValue」綁定替換爲「SelectedItem」。綁定表達式可以保持不變(儘管我不認爲你需要指定UpdateSourceTrigger)。

綁定到的SelectedItem意味着你vmCustomer需要selectedAddressCity財產,而不是selectedAddressIdCity ID(你可以刪除cmbSelectedAddressCities' SelectedValuePath)。

+0

感謝您的建議Sphinxxx。我已經做了同樣的事情(甚至是財產的名稱:selectedAddressCity)。在挖了一點之後,我發現了真正的問題。解釋有點複雜,我現在沒有足夠的時間(我在辦公室)。我將在本週晚些時候發佈詳細信息和解決方案(以防某人碰巧遇到同樣的問題)。 – doGmaI

+0

這很好聽,我期待看到您的解決方案! – Sphinxxx

0

對不起,很長的延遲。

我知道我答應在本週結束時發回我的解決方案,但我的電腦決定第二天去世。 關於我原來的問題,我採用了2個「解決方案」。 首先我刪除了將其更改爲區域/城市的完整說明的數字ID。我認爲這很好,但問題仍然存在於一些「奇怪」的情況下(例如,當第一次點擊區域組合框時) 在代碼中挖了一段時間之後,我發現真正的問題出在我爲在轉換過程中,我犯了一個錯誤:而不是「如果沒有」我寫了「如果不是」,結果是沒有任何轉換爲​​空間,搞亂了整個父子關係 因爲我很擔心,這個問題是在我的代碼,而不是在一段代碼我張貼在這裏。

我再次感謝大家,併爲延遲