Windows Phone 8.1中資料繫結之二(綁定資料不變更的解決方案)

來源:互聯網
上載者:User

標籤:windows phone 8.1   datacontext綁定資料   資料來源改變繫結目標ui上未改變   inotifypropertychang   propertychanged   

綁定有三種繫結模式,綁定也分UI到UI的綁定和自訂資料來源到UI的綁定。

其中自訂資料來源到UI的綁定是比較複雜的。如果我們利用資料內容DataContext來綁定資料,當我們改變資料來源

資料時,會發現繫結目標UI上對應的資料並沒有發生改變,按理來說採用的是預設綁定OneWay模式,資料來源的更改

應該會導致介面UI的目標屬性發生修改。

這是為什麼呢?因為具體的資料來源屬性並沒有實現更改通知,資料來源資料更改了但是無法通知到目標UI上,通俗點來

講就是,資料來源你自顧自的改動,你不通知一下作為UI的我,我哪裡知道你改動了,我不知道那我就自己不改動嘍。


當然一個問題出現,總會有解決方案的。現在亟待解決的問題就是如何能檢測到資料來源的更改,必須給資料來源實現一

種合適的屬性更改通知機制。


解決方案:資料來源必須實現INotifyPropertyChanged介面,此介面中具有PropertyChanged事件,該事件通知綁定

引擎源已更改,以便綁定引擎可以更新目標值。如果要實現此介面,需要聲明PropertyChanged事件並建立

OnPropertyChanged方法。對於每個需要更改通知的屬性,只要是進行了更新,都需要調用OnPropertyChanged

方法。


範例程式碼如下:

XAML代碼:

<Page    x:Class="App1.DataBindDemo"    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 Text="{Binding Test}" FontSize="25" HorizontalAlignment="Center"/>        <Button x:Name="change" HorizontalAlignment="Center" Width="300" Content="更改資料來源資料" Click="change_Click"/>    </Grid></Page>

.CS代碼:

using System;using System.Collections.Generic;using System.ComponentModel;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 DataBindDemo : Page    {        public class TestData:INotifyPropertyChanged        {            private string test;            public string Test            {                get { return test; }                set                {                    test = value;                    OnPropertyChanged("Test");                }            }            public event PropertyChangedEventHandler PropertyChanged;            protected void OnPropertyChanged(string name)            {                PropertyChangedEventHandler handler = PropertyChanged;                if(handler!=null)                {                    handler(this, new PropertyChangedEventArgs(name));                }            }        }        TestData testData = new TestData() { Test="看,這就是DataContext繫結資料!"};        public DataBindDemo()        {            this.InitializeComponent();            this.DataContext = testData;        }        /// <summary>        /// 在此頁將要在 Frame 中顯示時進行調用。        /// </summary>        /// <param name="e">描述如何訪問此頁的事件數目據。        /// 此參數通常用於配置頁。</param>        protected override void OnNavigatedTo(NavigationEventArgs e)        {        }        private void change_Click(object sender, RoutedEventArgs e)        {            testData.Test = "看,這是新的綁定資料!";        }    }}


Windows Phone 8.1中資料繫結之二(綁定資料不變更的解決方案)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.