博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十九章:集合视图(十七)
阅读量:6213 次
发布时间:2019-06-21

本文共 2160 字,大约阅读时间需要 7 分钟。

TableView及其意图

Xamarin.Forms中三个集合视图中的第三个是TableView,名称可能有点欺骗性。当我们在编程上下文中听到“表”这个词时,我们通常会想到一个二维网格,例如HTML表。 Xamarin.Forms TableView是一个垂直的,可滚动的项目列表,它们是从Cell类可视化生成的。这可能听起来与ListView非常相似,但ListView和TableView在使用上有很大不同:

ListView通常显示相同类型的项列表,通常是特定数据类的实例。这些项目位于IEnumerable集合中。 ListView指定用于渲染这些数据对象的单个Cell派生。物品是可选择的。
TableView显示不同类型的项目列表。在现实生活中,这些项通常是单个类的属性。每个项目都与其自己的Cell关联以显示属性,并且通常允许用户与属性进行交互。在一般情况下,TableView显示多种类型的单元格。
属性和层次结构
ListView和ItemsView一起定义了18个属性,而TableView只有四个:

  • 类型为TableIntent的Intent。
  • TableRoot类型的根。 (这是TableView的content属性。)
  • Type类型的RowHeight。
  • HowUnevenRows类型为bool。

RowHeight和HasUnevenRows属性在TableView中扮演与ListView中相同的角色。

也许TableView类最具启发性的属性是一个不保证对功能和外观有任何影响的属性。 此属性名为Intent,它指示您如何在程序中使用特定的TableView。 您可以将此属性(或不是)设置为TableIntent枚举的成员:

  • Data
  • Form
  • Settings
  • Menu

这些成员建议您使用TableView的各种方法。 当用于数据时,TableView通常显示相关项目,但不同类型的项目。 表单是用户与之交互以输入信息的一系列项目。 用于程序设置的TableView有时称为对话框。 此用法类似于Form,但设置通常具有默认值。 您还可以将TableView用于菜单,在这种情况下,项目通常使用文本或位图显示,并在点击时启动操作。

Root属性定义TableView显示的项目层次结构的根。 TableView中的每个项目都与单个Cell派生相关联,并且各个单元格可以组织成多个部分。 为了支持这种项目层次结构,定义了几个类:

  • TableSectionBase是一个派生自BindableObject的抽象类,它定义了Title属性。
  • TableSectionBase是一个抽象类,它派生自TableSectionBase并实现IList 接口,因此也实现ICollection 和IEnumerable 接口。 该类还实现了INotifyCollectionChanged接口; 在内部,它为此集合维护一个ObservableCollection 。 这允许项目动态添加到TableView或从TableView中删除。
  • TableSection派生自TableSectionBase 。
  • PableRoot派生自TableSectionBase 。

总之,TableView有一个Root属性,您可以将其设置为TableRoot对象,该对象是TableSection对象的集合,每个对象都是Cell对象的集合。

请注意,TableSection和TableRoot都从TableSectionBase继承Title属性。 根据派生类,这可以是节的标题,也可以是整个表的标题。 TableSection和TableRoot都有构造函数,可以在创建对象时设置此Title属性。
TableSectionBase 类定义了两个Add方法,用于向集合中添加项。 ICollection接口需要第一个Add方法; 第二个不是:

  • public void Add(T item)
  • public void Add(IEnumerable items)

第二个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/

你可能感兴趣的文章
AnyChat在打开音频设备的同时会自动发布视频数据吗
查看>>
视频对讲技术 大厅好友解决方案
查看>>
Apache+MariaDB+PHP架构的编译安装
查看>>
Linux磁盘分区UUID的获取及其UUID的作用
查看>>
1. gzip, bzip2 能否直接压缩目录呢?
查看>>
JAVA-WEB
查看>>
shiro实现授权的三种操作
查看>>
Socket编程实例之源代码
查看>>
Linux下编译安装python3
查看>>
测试请求的工具fiddler
查看>>
多台web的Varnish配置实例及内置变量详解
查看>>
789高手出招,国产手机的崛起路
查看>>
PLSQL绑定变量
查看>>
PXE BIOS 启动Gparted live
查看>>
数据不足,如何进行迁移学习?
查看>>
阿里云—Gartner 2018 亚太区WAF魔力象限唯一云WAF提供商
查看>>
通过阿里云K8S Ingress Controller实现路由配置的动态更新
查看>>
AzurePack之SCVMM虚拟机WindowsServer2003模版
查看>>
response WriteFile
查看>>
桌面虚拟化、应用虚拟化简介_XenDesktop 7.5
查看>>