
<MvxRecyclerVIEw androID:ID="@+ID/my_recycler_vIEw" local:MvxItemTemplate="@layout/item_recycler_vIEw" />
viewmodel非常简单,它只包含一个属性,用于保存要在RecyclerVIEw中显示的数据:
public class Mainviewmodel : Mvxviewmodel{ private IEnumerable<viewmodelitem> _viewmodelitems; public IEnumerable<viewmodelitem> viewmodelitems { get { return _viewmodelitems; } set { SetProperty(ref _viewmodelitems,value); } } } 通常,我喜欢尽可能多地使用MvvmCross流畅的API,因为隐式重构支持.
所以在我的活动中,我绑定了MvxRecyclerVIEw的属性,如下所示:
var recyclerVIEw = VIEw.FindVIEwByID<MvxRecyclerVIEw>(Resource.ID.my_recycler_vIEw);var set = this.CreateBindingSet<MainVIEw,Mainviewmodel>();set.Bind(recyclerVIEw) .For(v => v.ItemsSource) .To(vm => vm.viewmodelitems);set.Apply();
到现在为止还挺好.现在,项模板的布局文件基本上只包含一个TextVIEw:
<linearLayout> <TextVIEw androID:ID="@+ID/innerText" /></linearLayout>
我的viewmodelitem类看起来像这样:
public class viewmodelitem{ public string Title { get; set; }} 我现在的问题是,如何以及在何处使用流畅的API将TextVIEw.Text属性绑定到viewmodelitem.Title属性?
我知道通过在项目模板布局文件中提供MvxBind属性,没有流畅的API很容易,但我真的更喜欢流畅的API解决方案.
解决方法 继承自MvxRecyclerAdapter并为RecyclerVIEw创建自定义适配器.覆盖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); }} 在此VIEwHolder中,您可以使用Fluent API进行绑定.
public class MyVIEwHolder : MvxRecyclerVIEwHolder{ private Readonly TextVIEw textVIEw; public MyVIEwHolder(VIEw itemVIEw,IMvxAndroIDBindingContext context) : base(itemVIEw,context) { this.textVIEw = itemVIEw.FindVIEwByID<TextVIEw>(AndroID.Resource.ID.Text1); this.DelayBind(() => { var set = this.CreateBindingSet<MyVIEwHolder,viewmodelitem>(); set.Bind(this.textVIEw).To(x => x.Title); set.Apply(); }); }} 在您的Activity中创建适配器并将其添加到RecyclerVIEw:
var adapter = new MyAdapter((IMvxAndroIDBindingContext)this.BindingContext);recyclerVIEw.Adapter = adapter;
并将您的项目绑定到您的适配器的ItemsSource:
set.Bind(this.adapter).For(x => x.ItemsSource).To(x => x.viewmodelitems);总结
以上是内存溢出为你收集整理的如何使用MvvmCross流畅的API将RecyclerView项目的TextView绑定到Android上ViewModel的属性?全部内容,希望文章能够帮你解决如何使用MvvmCross流畅的API将RecyclerView项目的TextView绑定到Android上ViewModel的属性?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)