2011-06-20 6 views
0

MVVMでSilverlightを使用して、セレクションされた値をプリロードされたコンボボックスに設定しようとしています。プリロードされたコンボボックスの選択された値を設定するためにオブジェクトを比較するMVVM

値を選択する前に、これらのコンボボックスアイテムを読み込みます。

たとえば、国を選択するためのコンボボックスがあります。私の最初のステップは、コンボボックスソースにバインドされているリストをロードすることです。これは完全にロードされています。

この後、私は "SelectedCountry"オブジェクトをコンボボックスのselectedItemに双方向バインディングでバインドしています。

これは、コンボボックスの値を選択して、SelectedCountryオブジェクトが正しく選択されている場合に最適です。

ViewModelで選択した値を割り当てようとすると問題が発生します。この方法では、comboboxのselecteditemは更新されません。

実際、これらのオブジェクトは同じオブジェクトではない(同じ値を持っていますが、それらは異なる参照です)。

私はequalsメソッドを再実装すればよいのでしょうか?または、リスト内を検索して同じオブジェクトを見つける必要がありますか?同じ国籍の人が同じ国になるので、これは非常に簡単ですが、もっと複雑なオブジェクトを使うことができ、equalsメソッドが優れていると思います。

ありがとうございます!いくつかのコード例を追加するための

編集:

<ComboBox Grid.Column="7" Margin="6,0" Name="cBTipoPoliza" VerticalAlignment="Center" TabIndex="4" ItemsSource="{Binding TiposPolizas, Mode=OneWay}" SelectedItem="{Binding TipoPoliza, Mode=TwoWay}"> 
<ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding nombre_tipo}" /> 
     </DataTemplate> 
</ComboBox.ItemTemplate> 

答えて

2

通常、私はちょうど彼らがIDまたは名前

+0

これはまた、HashCodeとoperator =もオーバーライドすることを意味します。あなたはそれをオーバーライドしている間operator =! –

+0

私はこれを試しましたが、何も変わりません...私の "selectedValue"オブジェクトを割り当てると、equalsメソッドが評価されるのですか? – zapico

+0

私はComboBoxコードを追加しました。私はあなたが言うようにそれをやっていると思う。 – zapico

0

によって等しい場合はあなたがに試してみてくださいチェックする.Equals()メソッドをオーバーライド同時に同じオブジェクトの複数のコピーをメモリに保存しないようにします。これを行う1つの方法は、VMをオブジェクトのソースにすることです。 VMがリストをロードすると、ComboBoxがバインドできるVMにAvailableCountries ObservableCollectionプロパティが公開されます。

オブジェクトがIDに基づいて意味的に等しい場合は、必ずEqualsと==および!=とhashcodeをオーバーライドします。ただし、オブジェクトを更新できるようにすると、1つの画面で古いデータが保持されている場所(たとえアプリケーションの同じインスタンス内でも)に衝突する可能性があるため注意してください。

関連する問題