Windows Store apps开发[54]数据绑定(3)通知属性改变

注:本文由BeyondVincent(破船)原创首发

        转载请注明出处:BeyondVincent(破船)@DevDiv.com

绑定


更多内容请查看下面的帖子


[DevDiv原创]Windows 8 开发Step by Step



小引

当绑定源的某个属性改变了,有时候在绑定目标上需要得到实时更新,比如航班起飞时间延误了,那么需要实时的将此信息告知乘客。本文,我就来介绍一下通知属性改变。

简介

属性改变的通知在程序开发过程中非常的实用,用上了该功能,我们就不用自己去改变UI界面更新等操作了。通过绑定引擎可以完成属性改变通知,不过开发者也需要在代码上做一些编写。

通知属性改变的关键技术

实现INotifyPropertyChanged接口 发起PropertyChanged事件

实现步骤

A、新建空白工程,名称为BV_Binding_INotifyPropertyChanged
B、在项目工程上单击右键,选择添加->选择类->输入People,然后确定 C、在People.cs文件实现INotifyPropertyChanged接口
代码如下: 注:此demo的作用是对年龄属性进行增加,在小于18时,为未成年,否则为成年
在引发PropertyChanged事件时,使用属性名作为参数。如果要想表示所有属性都改变了,那么可以用string.Empty当作参数。在下面的代码中,有具体的演示
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BV_Binding_INotifyPropertyChanged
{
    public class People : INotifyPropertyChanged
    {
        private int age = 0;

        private string typeLevel = "未成年";

        public string TypeLevel
        {
            get { return typeLevel; }
            set
            {
                typeLevel = value;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public int Age
        {
            get { return age; }
            set
            {
                age = value;
                if (age < 18)
                {
                    TypeLevel = "未成年";
                }
                else
                { 
                    TypeLevel = "成年";
                    NotifyPropertyChanged(string.Empty);
                    return;
                }

                NotifyPropertyChanged("Age");
            }
        }

        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

D、在MainPage.xaml中使用绑定
<Page
    x:Class="BV_Binding_INotifyPropertyChanged.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:BV_Binding_INotifyPropertyChanged"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Green" Name="grid">
        <TextBlock  Foreground="White" FontSize="50" Text="{Binding Age}" Margin="462,193,556,485"></TextBlock>
        <TextBlock Foreground="White" FontSize="50" Text="{Binding TypeLevel}" Margin="462,288,556,407"></TextBlock>
        <Button Content="+1" FontSize="50" HorizontalAlignment="Left" Height="84" Margin="497,397,0,0" VerticalAlignment="Top" Width="247" Click="Button_Click_1"/>
    </Grid>
</Page>

E、MainPage.xaml.cs中设置DataContent,并处理按钮事件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
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=234238 上有介绍

namespace BV_Binding_INotifyPropertyChanged
{
    /// <summary>
    /// 可用于自身或导航至 Frame 内部的空白页。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        People people = new People();
        public MainPage()
        {
            this.InitializeComponent();

            grid.DataContext = people;
        }

        /// <summary>
        /// 在此页将要在 Frame 中显示时进行调用。
        /// </summary>
        /// <param name="e">描述如何访问此页的事件数据。Parameter
        /// 属性通常用于配置页。</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            ++people.Age;
        }
    }
}

F、运行效果
Store


您的回应...

相关话题

查看全部

也许你感兴趣

换一批

热门标签

更多