我正在尝试使用带有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>
答案 0 :(得分:2)
通常我只是覆盖.Equals()方法来检查它们是否等于ID或Name
答案 1 :(得分:0)
您应该尽量避免在内存中同时拥有同一对象的多个副本。一种方法是让您的VM成为对象的来源。当您加载列表时,VM会执行此操作并在您的ComboBox可以绑定到的VM上公开AvailableCountries ObservableCollection属性。
如果您的对象在语义上基于ID相等,则必须覆盖Equals和==和!=以及hashcode。但要小心,因为如果你让人们更新对象,你可能会遇到冲突(即使在应用程序的同一个实例中),其中一个屏幕保持陈旧数据。