2011-06-01 128 views
0

這不是一個問題,而是一個答案,答案可能對某些人來說顯得非常明顯,但我認爲它可能對其他人有用!Silverlight ComboBox TwoWay綁定失敗

我發佈了第一個創建帖子。情景是在答案。

回答

0

我有一個MainView/MainViewModel和一個SearchView/SearchViewModel。

我對填充了「性別」的對象列表中的MainView一個組合框(綁定到

ObservableCollection<Gender> Genders 

在MainViewModel)

的MainViewModel有型人的屬性,它反過來又性別類型的屬性。 Gender對象具有ID和Description的屬性(說明顯示在組合中)。

ComboBox的SelectedItem屬性以雙向模式綁定到'Person.Gender'。

當使用此設置新的Person對象上的Gender的值時,一切都很好。然後允許用戶搜索現有的人員。我基於參數檢索數據並創建了一個Person對象列表,並通過MVVM Light Toolkit的Messenger將它們傳遞給SearchViewModel。然後這些以模態方式顯示在SearchView的網格中。當用戶選擇一個人時,這個(SelectedPerson)從SearchViewModel傳回到MainViewModel,再次使用MVVM Light的Messenger。

這是現在我卡住了一段時間。我編碼爲

Person.Gender = SelectedPerson.Gender 

並期望組合框被更新爲正確的性別,但事實並非如此。

我搜索了綁定問題,發現了一個關於按正確順序使XAML ItemsSource和SelectedItems屬性的問題。我嘗試創建一個新的性別例如 Person.Gender =新性別{ID = SelectedPerson.Gender.ID ...等,但這並沒有工作。

然後我想到,儘管ComboBox中的Gender與SelectedPerson對象中的Gender有完全相同的屬性,但它並沒有使它變爲EQUAL,而是用人的術語來思考,而不是編程術語。與ComboBox相同的Gender對象位於ComboBox綁定的集合中(即ObservableCollection Genders)。因此,爲了得到它,我這樣做

  if (SelectedPerson.Gender != null) 
      { 
       foreach (Gender g in Genders) 
       { 
        if (SelectedPerson.Gender.ID == g.ID) 
        { 
         Person.Gender = g; 
         break; 
        } 
       } 
      } 

正如我所說的,這是可能明顯一些,但是當我本來卡住我沒有發現,這個樣子是沒有人描述的場景是這樣的任何解決方案。我會冒險猜測,在某些情況下,情景是相似的,但提問者沒有意識到,即對象的平等。