Сброс SelectedItem в Listbox, привязанном к RelayCommand в ViewModel

#silverlight #windows-phone-7 #mvvm-light #relaycommand

#silverlight #windows-phone-7 #mvvm-light #relaycommand

Вопрос:

Используя поведение EventToCommand, которое поставляется с MVVM Light, я привязываю выбранный элемент ListBox к RelayCommand в ViewModel

Все отлично работает в моем приложении для Windows Phone 7, за исключением того, что после перехода из представления с помощью ListBox обратно выбранный элемент остается таким же, как и раньше. Не то, что я хочу.

Я попытался сбросить выбранный индекс при переходе, но это приводит к повторному запуску команды.

Кто-нибудь еще решил эту проблему и как?

TIA

Патрик Лонг

Ответ №1:

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

 if (e.AddedItems.Count == 1)
{
    // Your code here
}
  

(Где e является экземпляром SelectionChangedEventArgs .)

Если выделение было удалено, AddedItems список будет пустым, но вместо него будет заполнен RemovedItems список.

Ответ №2:

Поскольку вы используете mvvm light, не можете ли вы вызвать метод clear в ViewModelLocator для конкретной модели представления?

Ответ №3:

Я отказался от использования события SelectionChanged. Теперь я делаю все это с помощью TapGestures. Недостатком этого является то, что TapGesture не работает с поведением EventToCommand, поэтому я перехватываю событие Gesture в представлении и запускаю команду, которая привязана к DataContext отправителя.

ИМХО, это намного аккуратнее, чем использовать SelctionChanged и возиться с selectedIndexes.