MvvmCross – MvxListView绑定多次点击

我正在使用MvvmCross开发一个应用程序,我在Android应用程序中遇到问题,设置绑定以捕获构成MvxListView项目的两个不同控件中的单击操作。 ViewModel中所有数据的绑定都可以正常工作这是我的FavouritesView的AXML

     

而MvxItemTemplate在这里:

      

这是我的FavouritesViewModel:

 using System; using Cirrious.MvvmCross.Plugins.Messenger; using MyApp.Core.Managers; using MyApp.Core.Services; using System.Collections; using MyApp.Core.Domain; using System.Collections.Generic; using Cirrious.MvvmCross.ViewModels; using System.Collections.ObjectModel; using System.ServiceModel.Channels; using Cirrious.CrossCore; using MyApp.Core.Messages; using MyApp.Core.Helpers; namespace MyApp.Core.ViewModels { public class FavouritesViewModel: StandardsViewModel { private IFavouritesService _favouritesService; public FavouritesViewModel (ITextService textService, IMvxMessenger messenger, ISettingsManager settingsManager, IPageService pageService, IFavouritesService favouriteService): base(textService, messenger, settingsManager, pageService) { _logger.LeaveBreadcrumb ("FavouritesViewModel" , "Constructor"); _favouritesService = favouriteService; } public string TitleText { get { return _textService.GetString("Favourites"); } } private ObservableCollection _favourites; public ObservableCollection Favourites { get { return _favourites; } set { _favourites = value; RaisePropertyChanged (()=>Favourites); } } public async new void Init() { _logger.LeaveBreadcrumb ("FavouritesViewModel" , "Init"); var messenger = Mvx.Resolve (); messenger.Subscribe(message => { DeleteFavourite (message.ThisFavourite); }); var favs = await _favouritesService.GetAll (); _logger.LeaveBreadcrumb ("FavouritesViewModel:Init", "Favourites found:" + favs.Count.ToString ()); Favourites = new ObservableCollection (favs); } ///  /// Deletes the favourite. ///  /// Favourite. public void DeleteFavourite(Favourite favourite) { _logger.LeaveBreadcrumb ("FavouritesViewModel:DeleteFavourite", favourite.Title); Favourites.Remove (favourite); RaisePropertyChanged ("Favourites"); _favouritesService.Delete (favourite); } ///  /// The delete favourite command. ///  private MvxCommand _deleteFavouriteCommand; ///  /// Gets the delete favourite command. ///  /// The delete favourite command. public MvxCommand DeleteFavouriteCommand { get { _deleteFavouriteCommand = _deleteFavouriteCommand ?? new MvxCommand (DeleteFavourite); return _deleteFavouriteCommand; } } public void ShowFavourite(Favourite favourite) { if (favourite != null) { _logger.LeaveBreadcrumb (string.Format("FavouriteViewModel - Selected : {0}", favourite.Title)); // TODO need to display the favourite piece of info } } private MvxCommand _showFavouriteCommand; public MvxCommand ShowFavouriteCommand { get { _showFavouriteCommand = _showFavouriteCommand ?? new MvxCommand (ShowFavourite); return _showFavouriteCommand; } } public string ButtonRemoveText { get { return _textService.GetString ("RemoveFromFavourites"); } } public string AreYouSureText { get { return _textService.GetString ("AreYouSure"); } } public string RemoveFavouriteText { get { return _textService.GetString ("RemoveFavourite"); } } } } 

我的问题的症状是View在单击“(x)删除”按钮时收到DeleteFavouriteMessage。 单击该项时,不会从MvxListView触发ItemClick事件ShowFavouriteCommand。

我确信我正在做某事,或者错过了一些简单的事情,但我正在努力取得任何进展。

我以前遇到过这个。 MvxItemTemplate布局中的按钮正在窃取焦点。 尝试为布局中的按钮设置android:focusable="false"

将焦点从ListView行中的Button更改为列表项

我正在更新这个答案,以便更彻底。 为ListView项中的常用Button控件设置android:focusable="false"可以解决问题。 如果您使用的是ImageButton则无法使用。

对于ImageButton您需要在布局的根视图上设置android:descendantFocusability="blocksDescendants"

请参阅此处接受的答案: 无法单击带有imagebutton的listview行

我认为你缺少android:choiceMode="singleChoice"