我无法使用fluent api将来自mvxrecyclerview(或其适配器)的itemclick绑定到viewmodel上的命令。如果我把itemssource和itemclick都放在xml中,这样我就不会对这样的解决方案感兴趣,那么它就会工作。
我用这篇文章作为一个很好的指导(How to use the MvvmCross fluent API to bind a RecyclerView item's TextView to a property of its ViewModel on Android?),除了我无法将itemclick on mvxrecyclerview(或适配器)绑定到mainviewmodel的命令,该命令将带我到下一个片段(itemssource的工作方式像一个符咒,但它是一个属性,而不是一个命令!)是的。
为了简洁起见,我不会从原始post(How to use the MvvmCross fluent API to bind a RecyclerView item's TextView to a property of its ViewModel on Android?)复制代码,因此假设来自该post的mainviewmodel已通过showitemcommand命令进行了增强:

public class MainViewModel : MvxViewModel
{
    private IEnumerable<ViewModelItem> _viewModelItems;
    public IEnumerable<ViewModelItem> ViewModelItems
    {
        get { return _viewModelItems; }
        set { SetProperty(ref _viewModelItems, value); }
    }

    public MvxCommand<ViewModelItem> ShowItemCommand
    {
        get
        {
            return new MvxCommand<ViewModelItem>(selectedItem =>
            {
                ShowViewModel<ViewModelItem>
                (new { itemId = selectedItem.Id });
            });
        }
    }
}

其他的都已经按照参考的帖子实现了。
现在,除了itemssource之外,我还想将itemsclick连接到mvxrecyclerview(或适配器)上的命令。这些命令可以互换的原因是mvxrecyclerview只是将这些命令转发给适配器。
显然,这应该有效…但它不能:
adapter.ItemClick = ViewModel.ShowItemCommand;

这也不起作用:
set.Bind(recyclerView).For(v => v.ItemClick).To(vm => vm.ShowItemCommand);

最佳答案

创建自定义MvxRecyclerViewHolder时,需要确保将click命令分配给ViewHolder。这是在自定义适配器的覆盖中完成的。
自定义示例OnCreateViewHolder

public class MyAdapter : MvxRecyclerAdapter
{
    public MyAdapter(IMvxAndroidBindingContext bindingContext)
        : base(bindingContext)
    {
    }

    public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
    {
        var itemBindingContext = new MvxAndroidBindingContext(parent.Context, this.BindingContext.LayoutInflaterHolder);
        var view = this.InflateViewForHolder(parent, viewType, itemBindingContext);

        return new MyViewHolder(view, itemBindingContext)
        {
            Click = ItemClick,
            LongClick = ItemLongClick
        };
    }
}

10-05 20:08