Windows Store apps开发[54]数据绑定(三)通知属性改变
Windows Store apps开发[54]数据绑定(3)通知属性改变
D、在MainPage.xaml中使用绑定
E、MainPage.xaml.cs中设置DataContent,并处理按钮事件
F、运行效果
注:本文由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、运行效果