本文共 2160 字,大约阅读时间需要 7 分钟。
Xamarin.Forms中三个集合视图中的第三个是TableView,名称可能有点欺骗性。当我们在编程上下文中听到“表”这个词时,我们通常会想到一个二维网格,例如HTML表。 Xamarin.Forms TableView是一个垂直的,可滚动的项目列表,它们是从Cell类可视化生成的。这可能听起来与ListView非常相似,但ListView和TableView在使用上有很大不同:
ListView通常显示相同类型的项列表,通常是特定数据类的实例。这些项目位于IEnumerable集合中。 ListView指定用于渲染这些数据对象的单个Cell派生。物品是可选择的。TableView显示不同类型的项目列表。在现实生活中,这些项通常是单个类的属性。每个项目都与其自己的Cell关联以显示属性,并且通常允许用户与属性进行交互。在一般情况下,TableView显示多种类型的单元格。属性和层次结构ListView和ItemsView一起定义了18个属性,而TableView只有四个:RowHeight和HasUnevenRows属性在TableView中扮演与ListView中相同的角色。
也许TableView类最具启发性的属性是一个不保证对功能和外观有任何影响的属性。 此属性名为Intent,它指示您如何在程序中使用特定的TableView。 您可以将此属性(或不是)设置为TableIntent枚举的成员:这些成员建议您使用TableView的各种方法。 当用于数据时,TableView通常显示相关项目,但不同类型的项目。 表单是用户与之交互以输入信息的一系列项目。 用于程序设置的TableView有时称为对话框。 此用法类似于Form,但设置通常具有默认值。 您还可以将TableView用于菜单,在这种情况下,项目通常使用文本或位图显示,并在点击时启动操作。
Root属性定义TableView显示的项目层次结构的根。 TableView中的每个项目都与单个Cell派生相关联,并且各个单元格可以组织成多个部分。 为了支持这种项目层次结构,定义了几个类:总之,TableView有一个Root属性,您可以将其设置为TableRoot对象,该对象是TableSection对象的集合,每个对象都是Cell对象的集合。
请注意,TableSection和TableRoot都从TableSectionBase继承Title属性。 根据派生类,这可以是节的标题,也可以是整个表的标题。 TableSection和TableRoot都有构造函数,可以在创建对象时设置此Title属性。TableSectionBase 类定义了两个Add方法,用于向集合中添加项。 ICollection接口需要第一个Add方法; 第二个不是:第二个Add方法似乎允许您将一个TableSection添加到另一个TableSection,并将一个TableRoot添加到另一个TableRoot,并且该过程似乎暗示您可以拥有一组嵌套的TableRoot或TableSection实例。但事实并非如此。此Add方法只是将项目从一个集合传输到另一个集合。层次结构永远不会比TableRoot更深入,TableRoot是TableSection对象的集合,TableSection对象是Cell对象的集合。
虽然TableView使用Cell对象,但它不使用DataTemplate。无论是在代码中还是在XAML中定义TableView,都始终直接在Cell对象上设置数据绑定。通常,这些绑定非常简单,因为您在TableView上设置了由各个项继承的BindingContext。在视觉和功能上,TableView与ScrollView中的StackLayout没有太大区别,其中StackLayout包含带有绑定的短视觉树的集合。但通常TableView在组织和安排信息方面更方便。转载地址:http://nvpja.baihongyu.com/