Я создаю приложение на Android через Xamarin, используя MvvmCross.Mvvmcross ListView SelectedItem setter не достиг
Я некоторое время боролся с этой проблемой, и я нашел обход, но я уверен, что это неправильный способ сделать это.
Это касается выбранного элемента в MvxListView:
<Mvx.MvxListView
android:id="@+id/productSearchResultListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="ItemsSource ProductSearchResultLst; SelectedItem SelectedProductSearchResult"
local:MvxItemTemplate="@layout/productsearchresult_row" />
При выборе пункта из этого списка, пользователь fowarded на страницу, где обрабатывается этот элемент. Как только это будет сделано, пользователь нажмет «подтвердить» и вернется в этот список. На этом этапе выделенный элемент подсвечивается (что мне нравится), но его нельзя снова щелкнуть. То есть, элемент не открывается, если вы нажмете на него снова. Я понимаю, почему. Нет выбранного изменения элемента. Тем не менее, я не могу отменить выбор выделенного элемента viewmodel SelectedProductSearchResult. Я поместил его в «null» на событие «OnRestart», исходящее из представления. Однако установщик выбранного элемента не будет достигнут при повторном выборе элемента .
Я также играл с ClearChoices и SetItemChecked на представлении непосредственно, но это не отмените выбранный элемент моей виртуальной машины, и поэтому мне не помогает.
Наконец, я понял, что выбранный элемент не изменяется (тот же объект), и поэтому сеттер не достигнут. Теперь я включил следующий фрагмент метода OnRestart в viewmodel, который обновляет список в том смысле, что все элементы являются новыми объектами:
var productLst = new List<WHM_PRODUCT>();
foreach (var item in ProductSearchResultLst)
productLst.Add (item.Clone());
ProductSearchResultLst = new ObservableCollection<WHM_PRODUCT> (productLst);
Это работает, но я думаю, что это очень глупо, потому что это означает, что я должен делать это для каждого объекта отдельно.
Должен быть лучший способ сделать это.
Любая обратная связь очень ценится!
Stefaan
Endrus, большое спасибо. Хотя я был очарован элегантностью использования сеттера для целей навигации (ваше предположение о правильности моей реализации), ваше решение имеет больше смысла. Я реализовал его, и он работает красиво. Я все еще немного озадачен тем, почему сеттер не работает (т. Е. Второй раз), но это скорее теоретический вопрос, чем практический. Если кто-то должен знать ответ, мне интересно. Еще раз спасибо! –
Добро пожаловать!:) О вашем решении - я думаю, что просто настройка SelectedProductSearchResult на null должна отменить выбор элемента списка. Вы уверены, что вызвали RaisePropertyChanged на SelectedProductSearchResult после того, как вы установили его значение в null? –
Да, вызывается RaisePropertyChanged, так как это часть логики setter. –