標籤:datacontext binding path elementname wp資料繫結
資料繫結,顧名思義,兩個要義:一是資料,而是綁定
然而再一想,是誰將資料繫結到誰的屬性上面,這一句話就道出了資料繫結的四個關鍵對象:繫結目標對象、目標屬
性、繫結來源、繫結來源中要綁定的值。
根據綁定對象和繫結來源來劃分,其實無非就兩種:
UI控制項作為綁定對象,UI控制項作為繫結來源(資料來源)
UI控制項作為綁定對象,自訂的資料對象作為繫結來源(資料來源,.cs中定義)
不管是前者還是後者,無非採用的是Binding這個神器來設定的。主要用到Binding的ElementName屬性和Path屬性
兩個屬性。ElementName屬性賦值為資料來源控制項的Name的值,Path屬性則賦值為資料來源控制項的某個屬性,這個屬
性就是資料來源控制項的一個資料變化的反映。
此種方法較為靈活,有多種情形和表現形式,如下(唯寫了Path,不代表沒有ElementName,對於UI到UI是有
ElementName,對於自訂資料來源到UI是沒有ElementName的):
(1)Binding Path=PropertyName
作為UI綁定UI:Binding ElementName=Grid,Path=Width
作為自訂資料來源綁定:Binding Path = propertyName
(2)Binding Path = Screen.Height,可以看作繫結來源是一個電腦對象,Screen(螢幕)是電腦裡的一個屬性,而
Height(高度)又是Screen的一個屬性,這樣就可以看出綁定了資料來源的屬性的屬性
(3)Binding Path = (Grid.Column)
(4)Binding Path = Screen[1]
(5)Binding Path = Screen.ScreenInfo[productor,date]
(6)Binding Path = "[(sys:Int32)3,(sys:Int32)22]",sys表示System命名空間
(7)Binding Path = /,如果源為集合視圖,則制定當前項
(8)Binding Path = /Screen/publisher
(9)Binding Path = .相當於Binding
再者,綁定有三種繫結模式:OneTime,OneWay,TwoWay
OneTime:表示一次綁定,即初次綁定一次,之後不管,資料來源改變也更新不到繫結目標上。也就是說只顯示資料而
不進行資料的更新的待用資料綁定。
OneWay:預設繫結模式。表示單向綁定,即當繫結來源資料發生更改時,會將變化更新到繫結目標上,適用於顯示變
化的資料。
TwoWay:表示雙向繫結,即繫結來源資料和繫結目標上的資料發生改變時,會相互影響,相互反映。這種做法會損耗
額外的效能,不到必須使用最好不要用。
其實對於UI控制項作為綁定對象,UI控制項作為繫結來源(資料來源)這種情況無非是使用上文的Binding設定做文章,重點還是
得在UI控制項作為綁定對象,自訂的資料對象作為繫結來源(資料來源,.cs中定義)的這種情形上,因為這種相對使用的更
廣,更加自由靈活,對於業務和邏輯需要更加貼近。
一般是利用DataContext屬性綁定到來源物件,DataContext屬性工作表示Windows Phone的UI元素的資料內容,可以
給UI元素提供資料。如果給頁面最頂層的Page設定其DatContext屬性綁定到來源物件,那麼整個頁面都可以使用該數
據源提供的資料。具體範例程式碼如下:
XAML代碼:
<Page x:Class="App1.DataBindDemo1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App1" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid> <TextBlock HorizontalAlignment="Center" Text="{Binding test}" FontSize="20"/> </Grid></Page>
.CS代碼:
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.InteropServices.WindowsRuntime;using Windows.Foundation;using Windows.Foundation.Collections;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Controls.Primitives;using Windows.UI.Xaml.Data;using Windows.UI.Xaml.Input;using Windows.UI.Xaml.Media;using Windows.UI.Xaml.Navigation;// “空白頁”項目範本在 http://go.microsoft.com/fwlink/?LinkID=390556 上有介紹namespace App1{ /// <summary> /// 可用於自身或導航至 Frame 內部的空白頁。 /// </summary> public sealed partial class DataBindDemo1 : Page { public class TestData { public string test { get; set; } } TestData testData = new TestData() { test="這是繫結資料!" }; public DataBindDemo1() { this.InitializeComponent(); this.DataContext = testData; } /// <summary> /// 在此頁將要在 Frame 中顯示時進行調用。 /// </summary> /// <param name="e">描述如何訪問此頁的事件數目據。 /// 此參數通常用於配置頁。</param> protected override void OnNavigatedTo(NavigationEventArgs e) { } }}
Windows Phone 8.1中資料繫結之一