gpt4 book ai didi

android - MvxRecyclerView Fluent API 绑定(bind)

转载 作者:搜寻专家 更新时间:2023-11-01 08:28:06 26 4
gpt4 key购买 nike

我无法使用 Fluent API 将 MvxRecyclerView(或其适配器)中的 ItemClick 绑定(bind)到我的 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?)并且所有这些都有效,除了我无法将 MvxRecyclerView(或适配器)上的 ItemClick 绑定(bind)到 MainViewModel 的命令,这将带我到下一个 fragment (ItemsSource就像一个魅力,但它是一个属性而不是命令!)。

为简洁起见,我不会复制原始帖子 (How to use the MvvmCross fluent API to bind a RecyclerView item's TextView to a property of its ViewModel on Android?) 中的代码,因此假设该帖子中的 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 之外,我还想将 MvxRecyclerView(或适配器)上的 ItemClick 连接到命令。这些可以互换的原因是 MvxRecyclerView 只是将这些命令中继到适配器。

显然,这应该有效...但它不:

adapter.ItemClick = ViewModel.ShowItemCommand;

这也不起作用:

set.Bind(recyclerView).For(v => v.ItemClick).To(vm => vm.ShowItemCommand);

最佳答案

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


自定义 ViewHolder 的例子

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
};
}
}

关于android - MvxRecyclerView Fluent API 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42938112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com