Сравните объекты, чтобы установить выбранное значение в предварительно загруженном комбинированном окне silverlight MVVM - PullRequest
0 голосов
/ 20 июня 2011

Я пытаюсь установить выбранное значение для предварительно загруженного комбинированного списка, используя silverlight с MVVM.

Я загружаю эти элементы списка перед выбором значения.

Например, у меня есть поле со списком, чтобы выбрать страну. Мой первый шаг - загрузить список, связанный с источником в выпадающем списке. Это загружается отлично.

После этого у меня есть объект "SelectedCountry", связанный с selectedItem комбинированного списка в двустороннем связывании.

Это прекрасно работает, когда я выбираю любое из значений в выпадающем списке, и мой объект SelectedCountry выбран правильно.

Проблема возникает, когда я пытаюсь назначить выбранное значение в моей ViewModel. Таким образом, выбранный элемент списка не обновляется.

Полагаю, это потому, что на самом деле это не один и тот же объект (они имеют одинаковые значения, но являются разными ссылками).

Должно ли это сработать, если я повторно реализую метод 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 ]

2 голосов
/ 20 июня 2011

Обычно я просто перезаписываю метод .Equals (), чтобы проверить, равны ли они по идентификатору или имени

0 голосов
/ 20 июня 2011

Вам следует избегать одновременного хранения нескольких копий одного и того же объекта в памяти.Один из способов сделать это состоит в том, чтобы ваша ВМ была источником объектов.Когда вы загружаете список, сделайте так, чтобы виртуальная машина сделала это и предоставила свойство AvailableCountries ObservableCollection на виртуальной машине, с которым ваш ComboBox может связываться.

Если ваши объекты семантически равны на основе идентификатора, определенно переопределите Equals, == и!= и хэш-код.Однако будьте осторожны, потому что если вы позволяете людям обновлять объекты, вы можете столкнуться с коллизиями (даже внутри одного и того же экземпляра приложения), когда один экран удерживает устаревшие данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...