第十九章:集合视图(十七)

简介:

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在组织和安排信息方面更方便。

目录
相关文章
|
存储 人工智能 边缘计算
当 AI 进入「算力密集时代」:你的服务器能跑通大模型吗?
本文深入探讨AI服务器在技术落地中的核心瓶颈问题,结合实战经验解析从模型训练到端侧部署的算力优化策略。内容涵盖三大典型场景的算力需求差异、GPU服务器选型的五大反直觉真相、实战优化方法(如混合精度训练与硬件资源监控),以及边缘AI部署挑战和解决方案。同时提供算力弹性扩展策略、模型生命周期管理及合规性建议,帮助读者构建可持续发展的算力体系。文末附有获取更多资源的指引。
1086 17
|
数据采集 机器学习/深度学习 存储
首席数据官 (CDO) 的十一项核心职责【最后一项很关键】
公司聘请首席数据官 (CDO) 的趋势为数据管理专业人士创造了新的机会,他们可能认为自己的数据职业生涯已达到稳定水平。
首席数据官 (CDO) 的十一项核心职责【最后一项很关键】
|
弹性计算 Linux Python
教你用阿里云服务器ECS安装宝塔面板?(Linux Centos版)
教程目的:帮助小白用户,快速学会安装宝塔控制面板,并通过宝塔控制面板快速搭建建站环境。 所需材料: 1、云服务器一台,系统要选用Linux的,Linux相比win系统省配置:建议使用阿里云服务器,稳定,具体详情可以去阿里云官网看下 2、远程工具:XShell或者FinalShell 3、宝塔控制面板:(宝塔注册链接:https://www.bt.cn/?invite_code=MV9la3hmaXo= 里面有插件、提交工单啥的会用到) 宝塔控制面板安装步骤如下: 1、使用远程工具XShell,链接你的Linux服务器。
7619 0
|
12天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23480 11
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
16天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
5340 20
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
17天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
6376 16
|
6天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
1451 3

热门文章

最新文章