Windows Phone 8.1中数据绑定之二(绑定数据不变更的解决方案)

绑定有三种绑定模式,绑定也分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 = "看,这是新的绑定数据!";
        }
    }
}
时间: 2024-11-13 10:52:52

Windows Phone 8.1中数据绑定之二(绑定数据不变更的解决方案)的相关文章

knockoutjs中使用mapping插件绑定数据列表

使用KO绑定数据列表示例: 1.先申请V,T,T2三个辅助方法,方便调试.声明viewModel和加载数据时的映射条件mapping 2.先使用ko.mapping.fromJS()将原来的JS对象转成 ko 中的 viewModel ,并使用ko.applyBindings() 激活Knockout 3.下面这几行代码是写在ajax success回调函数内的. 即:使用result.Data来更新viewModel,在这里实际上就是更新的users数组,更新过程中按mapping中的规则为数

Windows Phone 8.1中数据绑定之一

数据绑定,顾名思义,两个要义:一是数据,而是绑定 然而再一想,是谁将数据绑定到谁的属性上面,这一句话就道出了数据绑定的四个关键对象:绑定目标对象.目标属 性.绑定源.绑定源中要绑定的值. 根据绑定对象和绑定源来划分,其实无非就两种: UI控件作为绑定对象,UI控件作为绑定源(数据源) UI控件作为绑定对象,自定义的数据对象作为绑定源(数据源,.cs中定义) 不管是前者还是后者,无非采用的是Binding这个神器来设置的.主要用到Binding的ElementName属性和Path属性 两个属性.

Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) --------------------------------------------------------------------------------引用或转载时请保留以下信息:大可山?[MSN:a3news(AT)hotmail.com] http://www.zpxp.com?http://www.brawdraw.com萝卜鼠在线图形图像处理

Windows Phone 8.1中数据显示控件基石------ItemsControl

在Windows Phone 8.1中数据显示交互控件无外乎FlipView,ListView,GridView等,但我们用的时候总不能直接写 <FlipView/>,<ListView/>,<GridView/>之类来使用吧,虽说这样也可以,但这样呈现出来的画面就很难看了,哪 个用户会高兴看呢,反正我是不高兴看. 在这里问题就来了,不光要求数据能绑定到位,功能也到位,界面也总得美化美化吧. 好了进入正题了: 这些数据呈现控件的基石是谁呢?当然是ItemsControl

Windows Server 2012 R2中通过IIS实现AD帐号密码修改功能

现在越来越多的企业会对AD帐号进行分类,例如将业务帐号.服务帐号同员工帐号分开管理,那么这类帐号也会因为业务应用特定类型而选择是否开启邮箱功能,再或者有些企业会采用腾讯企业邮箱或网易企业邮箱等等,这些平台本身同AD域是独立的,而且很多企业又使用MAC系统或计算机根本不加域,这时企业内网要搭建OA.WIKI.JIRA等一些需要调用AD中的LDAP让员工登录的系统时,则面临后期密码到期后用户没有入口去修改密码的问题.那么在今天我就要给大家介绍的是如何利用Windows Server 2012 R2中

windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) 简单说几句 在mongodb中3元素:db(数据库).collection(集合).document(文档) 其中collection类似于数据库中的表,document类似于行,这样一来我们就将内容对比起来记忆学习了. 数据格式 MongoDB documents是BSON格式(一种类json的一种二进制形式的存

Windows Server 2012 R2 VDI系列(二)—前提准备

为了方便VDI的配置,我们首先利用Windows Server 2012中的新功能将需要配置的服务器加入到统一的服务器组中,以便进行统一的管理 1.首先点击添加角色和功能 2.点击立即查找 3.选中本次实验中我们需要用到的服务器 4.将选中的服务器加入到右侧,点击确定 5.点击创建服务器组 6.为服务器组命名为VDI 配置完成后,我们已经将需要的服务器加入到服务器组中,接下来就可以在一台机器上进行统一的配置了 Windows Server 2012 R2 VDI系列(二)-前提准备,布布扣,bu

windows下mongodb基础玩法系列二CURD附加一

windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下mongodb基础玩法系列二CURD附加一 说在前面的话 在系列二中CURD只是简单的走了一下代码操作的流程,其中全是简单基础操作的内容, 在我仔细看完接下来的内容后决定再丰富一下前面的操作,并实战一个简单的demo出来,demo具体搭配语言暂时决定在PHP与nodejs之间. 增加内容至文档没说完

C++应用程序在Windows下的编译、链接(二)COFF/PE文件结构

2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下,可执行文件的存储格式的WLF格式.它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的. 在windows平台下,目标文件(.obj),静态库文件(.lib)使用COFF格式存储:而可执行文件(.exe),动态链接库文件(.dll)使用PE格式存储.静态库文件其实就是一堆目标文件的集合. 在“WinNT.h”头文件中定义了COFF格式文件,以及PE格式文件的数据结构.这些定义是一系列的结