如何使用带有反应式UI的XamarinAndroid将数据绑定到自定义ListView我有一个自定义ListView(我已将其布局定义为xaml)。我不知道如何使用活动类中的OneWayBind方法将此控件绑定到ViewModel中的observableCollection。我写了,this.OneWayBind(ViewModel,x=>x.OutletListing,x=>x.List).DisposeWith(SubscriptionDisposables);但给出了System.ArgumentException:无法将System.Collections.ObjectModel.ObservableCollection1转换为Android。小部件。列表显示。要解决此问题,请注册我在XamarinForms已经使用ItemSource属性的教程中看到的IBindingTypeConverter。谁能为此提供解决方案。提前致谢。更新我不知道如何继续回答。我想知道更多。这是我的ViewModel类。使用系统;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用系统诊断;使用Android.App;使用Android.Content;使用Android.OS;使用Android.Runtime;使用Android.Views;使用Android.Widget;使用ReactiveUI;使用System.Collections.ObjectModel;使用System.Reactive.Linq;使用Splat;使用System.Reactive.Disposables;使用System.Threading.Tasks;namespaceDistributrIII.Mobile.Droid.ViewModels{publicclassStockTakeVM:ReactiveObject{protectedLazyViewModelBindings=newLazy(()=>newCompositeDisposable());publicvoidRegisterObservables(){StockItemListing=newReactiveList();this.LoadStockItems=ReactiveCommand.CreateFromTask(asyncfilter=>{System.Diagnostics.Debug.WriteLine("LoadStockItemListing#1");varr=awaitGetStockItemListing(filter);returnr;},可观察。返回(真)).DisposeWith(V??iewModelBindings.Value);这个.LoadStockItems.ThrownExceptions.Subscribe(ex=>{System.Diagnostics.Debug.WriteLine("LoadStockItemListingFailed");});this.LoadStockItems.ObserveOn(RxApp.MainThreadScheduler).Subscribe(result=>{StockItemListing.Clear();foreach(variteminresult)StockItemListing.Add(item);});}asyncTaskGetStockItemListing(FilterParamsfilter){Listitems=newList(){newStockItemListingResult{StockItemName="猪肉香肠(经济型)500G",StockItemCode="CODE:J3103386",StockItemAmt="150"},newStockItemListingResult{StockItemName="COLLARBACON500G",StockItemCode="CODE:J3155667",StockItemAmt="152"},newStockItemListingResult{StockItemName="COLLARBACON1KG",StockItemCode="CODE:J2344545",StockItemAmt="200"},newStockItemListingResult{StockItemName="PORKCHIPPOLATAS1KG",StockItemCode="CODE:J31038779",StockItemAmt="378"},newStockItemListingResult{StockItemName="猪肉香肠(经济型)500G",StockItemCode="CODE:J3103386",StockItemAmt="23"},newStockItemListingResult{StockItemName="猪肉香肠(经济)500G",StockItemCode="CODE:J3103386",StockItemAmt="454"},newStockItemListingResult{StockItemName="领培根500G",StockItemCode="CODE:J3155667",StockItemAmt="123"},newStockItemListingResult{StockItemName="COLLARBACON1KG",StockItemCode="CODE:J2344545",StockItemAmt="675"},newStockItemListingResult{StockItemName="PORKCHIPPOLATAS1KG",StockItemCode="CODE:J31038779",StockItemAmt="11"},newStockItemListingResult{StockItemName="猪肉香肠(经济)500G",StockItemCode="CODE:J3103386",StockItemAmt="34"}};退换货品;}//可观察属性ReactiveList_stockItemListing;publicReactiveListStockItemListing{get{return_stockItemListing;}privateset{this.RaiseAndSetIfChanged(ref_stockItemListing,value);}}ReactiveCommand_loadStockItems;publicReactiveCommandLoadStockItems{get{return_loadStockItems;}privateset{this.RaiseAndSetIfChanged(ref_loadStockItems,value);}}publicStockTakeVM(){RegisterObservables();}}公共类StockItemListingResult:ReactiveObject{Guid_stockItemId;publicGuidId{get{return_stockItemId;}set{this.RaiseAndSetIfChanged(ref_stockItemId,value);}}字符串_stockItemName;公共字符串StockItemName{get{return_stockItemName;}set{this.RaiseAndSetIfChanged(ref_stockItemName,value);}}字符串_stockItemCode;公共字符串StockItemCode{get{return_stockItemCode;}set{this.RaiseAndSetIfChanged(ref_stockItemCode,value);}}字符串_stockItemAmt;publicstringStockItemAmt{get{return_stockItemAmt;}设置{this.RaiseAndSetIfChanged(ref_stockItemAmt,value);}}}}我的活动类如下usingSystem;使用System.Collections.Generic;使用System.Linq;使用系统。文本;使用Android.App;使用Android.Content;使用Android.OS;使用Android.Runtime;使用Android.Views;使用Android.Widget;使用ReactiveUI;使用Android.Support.V4.Widget;使用Android.Support.Design.Widget;使用DistributrIII.Mobile.Droid.ViewModels;使用DistributrIII.Mobile.Droid.Util;使用System.Reactive.Disposables;使用DistributrIII.Mobile.Droid.Models;使用Android.Support.V7.Widget;使用Android.Support.V7.App;使用Splat;使用Android.Support.V4.View;使用System.Reactive.Linq;命名空间DistributrIII.Mobile.Droid.Views.StockTake{[Activity(Label="StockTakeActivity",MainLauncher=true,Theme="@style/MainTheme")]publicclassStockTakeActivity:DistributrBaseActivity{privateAndroid.Support.V7.Widget.SearchView_搜索视图;公共ListView列表{得到;私有集;}ReactiveListStockListItems;StockTakeScreenAdapterosadapter;列表项=newList();publicStockTakeActivity(){this.ViewModel=newStockTakeVM();this.StockListItems=newReactiveList();}protectedoverridevoidOnCreate(BundlesavedInstanceState){base.OnCreate(savedInstanceState);SetContentView(Resource.Layout.Activity_StockTake);this.Bind(ViewModel,x=>x.StockItemListing,x=>x.StockListItems);//检查是否发生变化//StockListItems.ItemChanged//.Where(x=>x.PropertyName=="StockItemAmt"&&x.Sender.StockItemAmt)//.Select(x=>x.Sender)//.Subscribe(x=>{//Console.WriteLine("确保保存{0}!",x.DocumentName);//});this.WhenAnyValue(view=>view.ViewModel.StockItemListing).Where(listing=>listing!=null).Select(listing=>newDistributrIII.Mobile.Droid.Util.ReactiveListAdapter(listing,Resource.Layout.Activity_StockTake)).BindTo(this,view=>view.List.Adapter);this.ViewModel.LoadStockItems.Execute(newFilterParams{NameFilter="",Status="All"}).Subscribe();//List=FindViewById(Resource.Id.列表);设置反应列表(这个);vartoolbarST=FindViewById(Resource.Id.toolbarST);toolbarST.InflateMenu(Resource.Menu.StockTakeSearch);toolbarST.Title="盘点";}publicvoidSetupReactiveLists(Activitycontext){List=FindViewById(Resource.Id.List);foreach(StockListItems中的var项目){StockItemModelstockitem=newStockItemModel{StockItemName=item.StockItemName,StockItemCode=item.StockItemCode};items.Add(stockitem);}osadapter=newStockTakeScreenAdapter(this,items);List.Adapter=osadapter;List.ItemClick+=OnListItemClick;}}这是我的列表适配器类公共类StockTakeScreenAdapter:BaseAdapter{列表项;活动背景;publicStockTakeScreenAdapter(Activitycontext,Listitems):base(){this.context=context;this.items=项目;}publicoverridelongGetItemId(intposition){返回位置;}publicoverrideStockItemModelthis[intposition]{get{returnitems[position];}}publicoverrideintCount{get{returnitems.Count;}}publicoverrideViewGetView(intposition,ViewconvertView,ViewGroupparent){varitem=items[position];查看view=convertView;如果(view==null)view=context.LayoutInflater.Inflate(Resource.Layout.ViewCell_StockTake,null);view.FindViewById(Resource.Id.stockitem_name).Text=item.StockItemName;view.FindViewById(Resource.Id.stockitem_code).Text=item.StockItemCode;view.FindViewById(Resource.Id.stockitem_amt).Text=item.StockItemAmt;返回视图;这是我的问题我是否应该在活动类中创建另一个响应列表以进行绑定。如果我更改列表项的值,它会更新列表吗(我想使用另一个片段类来更新列表项的值。)我是使用RX进行Android开发的新手。如果我搞砸了什么,请原谅我。再次感谢。您可以使用适配器在Android上完成此操作,就像您在没有ReactiveExtensions的情况下一样。如果你想在RxUI中使用ListView,你将使用ReactiveListAdapter。不幸的是,这还没有真正记录下来,所以你可能想看看源代码:https://github.com/reactiveui/ReactiveUI/blob/develop/src/ReactiveUI/Platforms/android/ReactiveListAdapter.cs要点是您使用创建提供数据的ReactiveList实例。适配器然后监视此列表的更改以了解何时需要更新。示例:this.WhenAnyValue(view=>view.ViewModel.OutletListing).Where(listing=>listing!=null).Select(listing=>newReactiveListAdapter(listing,MyViewCreator)).BindTo(this,view=>view.列表.适配器);MyViewCreator是一个委托,它采用列表中的初始ViewModel和父ViewGroup,因此您可以使用初始数据扩充行并返回结果视图。以上就是C#学习教程:HowtouseXamarinAndroidwithReactiveUItobinddatatoacustomListViewtosharedallcontent。如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: