Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6535864
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2019-09-08 12:44:14

事件和事件处理程序是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,因此它们是完美的匹配。
您已经知道如何使用简单的事件处理程序完成这项小工作。 让我们看看如何使用数据绑定。

阅读(6192) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~