比较对象以在预加载的组合框silverlight MVVM中设置所选值

时间:2011-06-20 16:34:08

标签: silverlight mvvm

我正在尝试使用带有MVVM的silverlight将seletected值设置为预先加载的组合框。

我在选择值之前加载这些组合框项目。

例如,我有一个组合框来选择一个国家。我的第一步是加载一个绑定到组合框源的List。这是完美的装载。

在此之后,我有一个“SelectedCountry”对象以双向绑定方式绑定到组合框的selectedItem。

当我选择任何组合框值并正确选择了我的SelectedCountry对象时,这是完美的。

当我尝试在ViewModel中分配所选值时出现问题。这样,组合框选择项不会更新。

我想这是因为,事实上,它们不是同一个对象(它们具有相同的值,但它们是不同的引用)。

如果我重新实现equals方法,这应该可行吗?或者我应该通过搜索列表找到相同的对象?这很容易,因为如果它们具有相同的id,这两个国家将是相同的...但我可以有更复杂的对象,我认为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 个答案:

答案 0 :(得分:2)

通常我只是覆盖.Equals()方法来检查它们是否等于ID或Name

答案 1 :(得分:0)

您应该尽量避免在内存中同时拥有同一对象的多个副本。一种方法是让您的VM成为对象的来源。当您加载列表时,VM会执行此操作并在您的ComboBox可以绑定到的VM上公开AvailableCountries ObservableCollection属性。

如果您的对象在语义上基于ID相等,则必须覆盖Equals和==和!=以及hashcode。但要小心,因为如果你让人们更新对象,你可能会遇到冲突(即使在应用程序的同一个实例中),其中一个屏幕保持陈旧数据。