第十六章:数据绑定(一)

简介:

事件和事件处理程序是Xamarin.Forms交互式界面的重要组成部分,但事件处理程序通常执行非常基本的工作。它们在不同对象的属性之间传输值,在某些情况下只需更新Label以显示视图的新值。
您可以使用Xamarin.Forms的强大功能(称为数据绑定)自动化两个对象的属性之间的此类连接。在封面下,数据绑定安装事件处理程序并处理从一个属性到另一个属性的值传输,这样您就不必这样做。在大多数情况下你
在XAML文件中定义这些数据绑定,因此不涉及任何代码(或非常少的代码)。数据绑定的使用有助于减少应用程序中“移动部件”的数量。
数据绑定在Model-View-ViewModel(MVVM)应用程序体系结构中也起着至关重要的作用。正如您将在第18章“MVVM”中看到的那样,数据绑定提供了View(通常在XAML中实现的用户界面)与ViewModel和Model的底层数据之间的链接。这意味着用户界面和底层数据之间的连接可以在XAML中与用户界面一起表示。

绑定基础知识

数据绑定涉及多个属性,方法和类:
数据绑定涉及多个属性,方法和类:

  • Binding类(派生自BindingBase)定义了数据绑定的许多特征。
  • BindingContext属性由BindableObject类定义。
  • SetBinding方法也由BindableObject类定义。
  • BindableObjectExtensions类定义了SetBinding的另外两个重载。

两个类支持绑定的XAML标记扩展:

  • BindingExtension类是Xamarin.Forms专用的,它为用于在XAML中定义数据绑定的Binding标记扩展提供支持。
  • ReferenceExtension类对绑定也很重要。

两个接口也涉及数据绑定。 这些是:

  • INotifyPropertyChanged(在System.ComponentModel命名空间中定义)是类在通知外部类时属性已更改时使用的标准接口。此接口在MVVM中起主要作用。
  • IValueConverter(在Xamarin.Forms命名空间中定义)用于定义通过将值从一种类型转换为另一种类型来辅助数据绑定的小类。

数据绑定的最基本概念是:数据绑定始终具有源和目标。 源是对象的属性,通常是在运行时动态更改的对象。 当该属性更改时,数据绑定会自动更新目标,该目标是另一个对象的属性。
目标←来源
但正如您将看到的,有时源和目标之间的数据流不是一个恒定的方向。 然而,即使在这些情况下,由于一个基本事实,源和目标之间的区别很重要:
数据绑定的目标必须由BindableProperty对象支持。
如您所知,VisualElement类通过Element派生自BindableObject,Xamarin.Forms中的所有可视元素都将其大多数属性定义为可绑定属性。出于这个原因,数据绑定目标几乎总是视觉元素或 - 正如您将在第19章“集合视图”中看到的那样 - 被称为单元格的对象被转换为可视元素。
虽然数据绑定的目标必须由BindableProperty对象支持,但是对数据绑定源没有这样的要求。源可以是普通的旧C#属性。但是,在除了最简单的数据绑定之外的所有数据绑定中,源属性的更改会导致目标属性发生相应的更改。这意味着源对象必须实现某种通知机制,以便在属性更改时发出信号。此通知机制是INotifyPropertyChanged接口,它是一个涉及数据绑定的标准.NET接口,广泛用于实现MVVM体系结构。
因此,非平凡数据绑定源的规则 - 即可以动态更改值的数据绑定源 - 是:
非平凡数据绑定的源必须实现INotifyPropertyChanged。
尽管它很重要,但INotifyPropertyChanged接口具有非常简单的优点:它只包含一个名为PropertyChanged的事件,当一个属性发生变化时,类会触发该事件。
为方便起见,BindableObject实现了INotifyPropertyChanged。 当属性更改时,由可绑定属性支持的任何属性都会自动触发PropertyChanged事件。 事件的自动触发扩展到您可能在自己的类中定义的可绑定属性。
这意味着您可以在可视对象的属性之间定义数据绑定。 在宏观方案中,大多数数据绑定可能将可视对象与底层数据联系起来,但为了学习数据绑定和试验它们,在不定义数据类的情况下简单地链接两个视图的属性是很好的。
对于本章的前几个示例,您将看到数据绑定,其中source是Slider的Value属性,target是Label的Opacity属性。 当您操纵Slider时,Label会从透明变为不透明。 这两个属性都是double类型,范围从0到1,因此它们是完美的匹配。
您已经知道如何使用简单的事件处理程序完成这项小工作。 让我们看看如何使用数据绑定。

目录
相关文章
|
7天前
|
云安全 人工智能 自然语言处理
|
11天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
991 35
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
673 4
|
7天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
528 25
|
14天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
859 59
Meta SAM3开源:让图像分割,听懂你的话
|
4天前
|
弹性计算 网络协议 Linux
阿里云ECS云服务器详细新手购买流程步骤(图文详解)
新手怎么购买阿里云服务器ECS?今天出一期阿里云服务器ECS自定义购买流程:图文全解析,阿里云服务器ECS购买流程图解,自定义购买ECS的设置选项是最复杂的,以自定义购买云服务器ECS为例,包括付费类型、地域、网络及可用区、实例、镜像、系统盘、数据盘、公网IP、安全组及登录凭证详细设置教程:
196 114
|
11天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
577 50
大厂CIO独家分享:AI如何重塑开发者未来十年
|
7天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
382 25