我正在使用 MvvmCross 通过 Xamarin 在 Android 上构建一个应用程序。
我已经在这个问题上苦苦挣扎了一段时间,我找到了一种解决方法,但我很确定这不是正确的方法。
它涉及 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" />
When an item of this list is selected, the user is fowarded to a page where this item is handled. 完成后,用户单击“确认”并返回此列表。此时,选中的项目高亮显示(我喜欢),但无法再次点击。也就是说,如果您再次单击该项目,则不会打开它。我明白为什么。没有选定的项目更改。但是,我似乎无法取消选择视图模型的选定项目 SelectedProductSearchResult”。我已在来自视图的“OnRestart”事件中将其设置为“null”。但是再次选择项目时未达到选定项目的设置器.
我还直接在视图上使用了 ClearChoices 和 SetItemChecked ,但这并没有取消选择我的 VM 的选定项目,因此对我没有帮助。
最后,我发现所选项目没有改变(相同的对象),因此没有到达设置器。我现在在 viewmodel 的 OnRestart 方法中包含了以下部分,它更新了列表,因为所有项目都是新对象:
var productLst = new List<WHM_PRODUCT> ();
foreach (var item in ProductSearchResultLst)
productLst.Add (item.Clone());
ProductSearchResultLst = new ObservableCollection<WHM_PRODUCT> (productLst);
这可行,但我认为这是非常愚蠢的,因为这意味着我必须分别为每个对象执行此操作。
必须有更好的方法来做到这一点。
非常感谢任何反馈!
斯特凡