第十九章:集合檢視(十七)
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在組織和安排資訊方面更方便。
相關文章
- 集合檢視子類
- Python 第十節 第十七課Python
- 第十七天
- Android檢視動畫集合AndoridViewAnimationsAndroid動畫View
- 前端週刊第十七期前端
- 第九章%第十章
- python小白之路:第十九章 Boosting模型(二)Python模型
- [第十七篇]——Docker 安裝 NginxDockerNginx
- 用Rust刷leetcode第十七題RustLeetCode
- Mysql系列第十四講 檢視詳解MySql
- SpringBoot第十七篇:定時任務Spring Boot
- 第十三章第十七題(數學:Complex類)(Math:Complex class)
- 第十七屆D2大會(II)
- 第十七屆D2大會(I)
- 第十七章、groovy單元測試
- 解決集合檢視的header遮住滾動條Header
- 第十七章 用於大型程式的工具
- Flask 教程 第十七章:Linux上的部署FlaskLinux
- 第九章第十二題(幾何:交點)(Geometry: Intersections)
- [每日一題] 第十七題:青蛙跳臺階問題每日一題
- 在上海樂位元組學習Java的第十七天Java
- Mysql系列第十七講 流程控制語句(高手進階)MySql
- kubernetes實踐之三十七:Pod健康檢查
- 早餐|第十七期 · 模型優化器對模型做了哪些優化模型優化
- [單刷APUE系列]第十七章——高階程式間通訊
- 設計模式(十七)——迭代器模式(ArrayList 集合應用原始碼分析)設計模式原始碼
- 11 UML中的邏輯檢視、程序檢視、實現檢視、部署檢視
- [Django REST framework - 檢視元件之檢視基類、檢視擴充套件類、檢視子類、檢視集]DjangoRESTFramework元件套件
- ASP.NET Core 5.0 MVC中的檢視分類——佈局檢視、啟動檢視、具體檢視、分部檢視ASP.NETMVC
- 第十二天 Python之字典遍歷-集合-函式Python函式
- drf : 通用檢視類和(GenericAPIView)5個檢視擴充套件類,九個檢視子類,檢視集。APIView套件
- 《DNK210使用指南 -CanMV版 V1.0》第十九章 machine.PWM類實驗Mac
- 第十七屆中國計量大學程式設計競賽 I- Isolated Pointset程式設計
- 新聞出版研究院:第十七次全國國民閱讀調查
- 09檢視
- 檢視層
- 物化檢視
- gc 檢視GC