2011-06-01 15 views
0

これは疑問ではなく答えですが、その答えは非常に明白なように見えるかもしれませんが、他の人にはまだ役に立つかもしれないと思いました!Silverlight ComboBox TwoWayバインディングの失敗

私はこの投稿をまず投稿して投稿を作成しました。このシナリオは答えです。

答えて

0

私は、MainView/MainViewModelとSearchView/SearchViewModelを持っていました。

私は「性別」オブジェクトのリストが取り込まMAINVIEW上のコンボボックスを持っていた

MainViewModelが順番に持っていたPerson型のプロパティを持っていた(MainViewModelに

ObservableCollection<Gender> Genders 

に結合しています)ジェンダータイプのプロパティGenderオブジェクトはIDとDescriptionのプロパティを持っていました(説明はコンボで表示されていました)。

ComboBoxのSelectedItem属性はTwoWayモードで 'Person.Gender'にバインドされていました。

これを使用して、新しいPersonオブジェクトのGenderの値をすべて設定しても問題ありません。その後、ユーザーは既存のPersonを検索することができました。パラメータに基づいてデータを取得し、Personオブジェクトのリストを作成し、MVVM Light ToolkitのMessenger経由でSearchViewModelを渡しました。これらは、SearchViewのグリッドにモーダル表示されました。ユーザーがPersonを選択すると、この(SelectedPerson)がMVView LightのMessengerを使用してSearchViewModelからMainViewModelに戻されました。

これは私がしばらく立ち往生したところです。私は

Person.Gender = SelectedPerson.Gender 

をコード化し、正しい性別を更新するコンボボックスを期待したが、それはありませんでした。

バインディングの問題を検索し、正しい順序でXAML ItemsSource属性とSelectedItems属性を持つことがわかりました。たとえば、新しいGenderを作成しようとしました。 Person.Gender = new Gender {ID = SelectedPerson.Gender.ID ...などですが、これは機能しませんでした。

次に、ComboBoxのGenderはSelectedPersonオブジェクトのGenderと全く同じプロパティを持っていましたが、それはEQUALにならず、人間の言葉ではなくプログラミング用語で考えていました。 ComboBoxのDIDと等しいGenderオブジェクトは、ComboBoxがバインドされたコレクション(ObservableCollection Gender)に含まれていました。私はこれはおそらくいくつかには自明であるが、私が最初に貼り付けたとき、私は誰もがこのようなシナリオを説明するように、このように見えた任意の解決策を見つけることができませんでした言ったようにそのため、それを得るために、私はこの

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

をしました。私はシナリオが似ているが質問者が実現していない、つまりオブジェクトの平等性があるケースもあると推測している。

関連する問題