Xamarin.ios 如何处理UITableViewCells中的绑定
我一直在使用ReactiveUI开发一个应用程序 我的问题是UITableView和单元格的重用。我尝试使用ReactiveTableViewSource,但这似乎没有给我想要的自定义级别(自定义页眉和页脚视图) 所以我使用UITableViewSource和UITableViewCell并实现了IViewFor。 然后我在单个细胞中进行了结合 这很好,但我担心每次重用单元格时都会“重新绑定”到新的ViewModel。我相信我已经解决了这个问题,但我相信有更好的方法Xamarin.ios 如何处理UITableViewCells中的绑定,xamarin.ios,reactiveui,Xamarin.ios,Reactiveui,我一直在使用ReactiveUI开发一个应用程序 我的问题是UITableView和单元格的重用。我尝试使用ReactiveTableViewSource,但这似乎没有给我想要的自定义级别(自定义页眉和页脚视图) 所以我使用UITableViewSource和UITableViewCell并实现了IViewFor。 然后我在单个细胞中进行了结合 这很好,但我担心每次重用单元格时都会“重新绑定”到新的ViewModel。我相信我已经解决了这个问题,但我相信有更好的方法 我正在使用的代码(仅相关位
我正在使用的代码(仅相关位): 公共部分类FlavourTableViewCell:UITableViewCell,IViewFor { 公共菜单ItemViewModel.FlavourSetItemViewModel视图模型{get;set;} object IViewFor.ViewModel{get{return ViewModel;}set{ViewModel=(MenuItemViewModel.FlavourSetItemViewModel)值;} 列表绑定=新列表(); //当新数据应显示在单元格中时调用 内部无效更新(MenuItemViewModel.FlavourSetItemViewModel数据,MenuItemViewModel.FlavourseSelectionEnum类型) { ViewModel=数据; //清除旧绑定 if(bindings.Any()){ bindings.ForEach(x=>x.Dispose()); bindings.Clear(); } 添加(this.Bind(ViewModel,x=>x.IsSelected,view=>view.SelectionButton.Selected)); } }
其他信息:
FlavourSetItemViewModel
包含FlavourSetItemViewModel
的列表。我将试着解释如下:
- FlavourSetItemViewModel-具有节名
- FlavourSetItemViewModel-具有项目名称
- FlavourSetItemViewModel-具有项目名称
- FlavourSetItemViewModel-具有项目名称
- FlavourSetItemViewModel-具有项目名称
- FlavourSetItemViewModel-具有节名
- FlavourSetItemViewModel-具有项目名称
- 在我看来,你所做的并没有错。您可以改进的是使用
CompositeDisposable
而不是IDisposable
列表
但您也可以尝试使用ReactiveTableViewSource
,方法是使用自己的实现,然后覆盖GetViewForHeader
以提供自己的头视图
然后,可以将数据绑定到自定义表视图源:
this.whenyValue(view=>view.ViewModel.Section1,view=>view.ViewModel.Section2,(Section1,Section2)=>newtablesectioninformation[]{
新表节信息(第1节,“第1节单元格”,44),
新表节信息(第2节,“第2节单元格”,44)
})
.BindTo(tableViewSource,x=>x.Data);
如果您使用的是动态数量的分区,则可以执行以下操作:
this.whenyValue(视图=>view.ViewModel.TableSections)
.Select(tableData=>tableData.Select(section=>newtablesectioninformation(section,“cellIdentifier”,44)).ToArray())
.BindTo(tableViewSource,x=>x.Data);
假设TableData
是一个二维排序列表
请注意,在我的示例中,不考虑对列表的更改。仅更改属性(表分区)本身。这看起来很有希望。但我有一个动态的部分数量。有什么提示吗?我在答案中加了这个。显然今天我的脑细胞不是都在工作。请详细说明
表节信息
的实现方式好吗?您可以使用提供的表节信息
的实现方式。这只是为ReactiveTableViewSource
提供正确数据的一种方法。您可以创建自己的ReactiveTableViewSource
实现,以便能够覆盖GetViewForHeader
等方法。或者能够使用动态行高度,例如。只是别忘了用正确的实际类型替换我示例中的所有泛型类型。例如TReactiveTableViewCell
是您的自定义ReactiveTableViewCell
类和TModel
该单元格在其IViewFor
界面中的视图模型。您能看看这个要点并告诉我有什么问题吗?我得到一个System.Reflection.TargetException(非静态方法需要一个目标)。这可能很简单,但我就是看不到