WPF數(shù)據(jù)處理相關(guān)經(jīng)驗總結(jié)
WPF數(shù)據(jù)處理是一個非常復雜的操作步驟。不過相比其它工具的應用。它又是一個可以幫助用戶簡單實現(xiàn)功能需求的一個操作。#t#
數(shù)據(jù)綁定,這是WPF提供的一個真正的優(yōu)點。除了可以用在傳統(tǒng)的綁定環(huán)境中,數(shù)據(jù)綁定已經(jīng)被擴展應用到控件屬性上。學習應用數(shù)據(jù)綁定,也能真正的體現(xiàn)XAML的好處。到底什么是數(shù)據(jù)綁定呢?
也許你從字面上已經(jīng)理解的很不錯了。通過數(shù)據(jù)綁定,我們在應用程序UI和程序邏輯之間建立了一種聯(lián)系。正常建立綁定后,在數(shù)據(jù)的值發(fā)生改變后,綁定到數(shù)據(jù)的元素將自動更新、體現(xiàn)出數(shù)據(jù)的變化。
同樣,我們先看幾個相關(guān)的知識點:
WPF數(shù)據(jù)處理1、DataContext屬性。
設(shè)置DataContext屬性,其實就是指定數(shù)據(jù)上下文。那么數(shù)據(jù)上下文又是什么呢?又是一個新的概念:數(shù)據(jù)上下文允許元素從它的父元素繼承數(shù)據(jù)綁定的數(shù)據(jù)源。很簡單,在某個元素的DataContext中指定的值,那么在這個元素的子元素也可以使用。注意,如果我們修改了FrameworkElement或者FrameworkContentElement元素的DataContext屬性,那么元素將不再繼承DataContext值。也就是說新設(shè)置的屬性值將覆蓋父元素的設(shè)置。如何設(shè)置DataContext屬性,稍后說明。
WPF數(shù)據(jù)處理2、數(shù)據(jù)源的種類。
也許,WPF提供的數(shù)據(jù)綁定只是實現(xiàn)了一項普通的功能而已,但是,WPF中所支持的多種數(shù)據(jù)源使得它的數(shù)據(jù)綁定功能將更加強大?,F(xiàn)在,WPF支持如下四種綁定源:
(1)、任意的CLR對象:數(shù)據(jù)源可以是CLR對象的屬性、子屬性以及Indexers。對于這種類型的綁定源,WPF采用兩種方式來獲取屬性值:A)、反射(Reflection);B)、CustomTypeDescriptor,如果對象實現(xiàn)了ICustomTypeDescriptor,綁定將使用這個接口來獲取屬性值。
(2)、XML結(jié)點:數(shù)據(jù)源可以是XML文件片斷。也可以是XMLDataProvider提供的整個XML文件。
(3)、ADO.NET數(shù)據(jù)表。我對ADO.NET的了解不夠,在此不做過多評論。
(4)、Dependency對象。綁定源可以是其它DependencyObject的DependencyProperty屬性。
WPF數(shù)據(jù)處理3、數(shù)據(jù)綁定的方式:
(1)、OneWay,單一方向的綁定,只有在數(shù)據(jù)源發(fā)生變化后才會更新綁定目標。
(2)、TwoWay,雙向綁定,綁定的兩端任何一端發(fā)生變化,都將通知另一端。
(3)、OneTime,只綁定一次。綁定完成后任何一端的變化都不會通知對方。
在上面的第二點我介紹了數(shù)據(jù)源的種類,注意這里的概念和下面要說明的指定數(shù)據(jù)源的方式的區(qū)別。目前,指定數(shù)據(jù)源有三種方式,我們可以通過任何一種方式來指定上述的任何一種數(shù)據(jù)源:
(1)、通過Source標記。我們可以在使用Binding使用Source標記顯式指定數(shù)據(jù)源。
(2)、通過ElementName標記。這個ElementName指定了一個已知的對象名稱,將使用它作為綁定數(shù)據(jù)源。
(3)、通過RelativeRource標記。這個標記將在后面說明ControlTemplate和Style時再進行說明。
現(xiàn)在我們說明了很多和WPF數(shù)據(jù)處理相關(guān)的內(nèi)容。但是再綁定的時候,我們還需要指定綁定對象的屬性名稱。所以WPT提供了一個Path標記。它被用來指定數(shù)據(jù)源的屬性。也即是數(shù)據(jù)源將在數(shù)據(jù)源對象的Path所指定的屬性上尋找屬性值。