天天看點

第十六章:資料綁定(一)綁定基礎知識

事件和事件處理程式是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,是以它們是完美的比對。

您已經知道如何使用簡單的事件處理程式完成這項小工作。 讓我們看看如何使用資料綁定。

繼續閱讀