日期:2014-05-16  浏览次数:20667 次

[Win8]Windows8开发笔记(八):数据绑定的基础

先用一个最简单的例子来演示数据绑定。

新建一个项目TestData来测试,拖拽两个控件到屏幕上:TextBox和Slider。

给Slider的Name设置为slider1,然后我们给两个控件之间添加数据绑定,使得TextBox始终显示滑动条内的进度值。

然后给Text属性添加数据绑定,并且指定对象为slider1,完整代码如下:

 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <TextBox HorizontalAlignment="Center" Margin="0,-100,0,0" TextWrapping="Wrap" 
                 Text="{Binding Value, Mode=TwoWay, ElementName=slider1}" VerticalAlignment="Center"/>
        <Slider x:Name="slider1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" Height="30"/>

    </Grid>

运行的结果就是1.拖动滑块时文本框的数值也随之改变2.文本框内容改变时滚动条也会跟着改变,这就是TwoWay:


那么怎么自己去写数据绑定呢?

新建一个Person类来试验一下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestData
{
    class Person
    {
        public string Name
        {
            get;
            set;
        }

        public int Age
        {
            get;
            set;
        }
    }
}

然后在主页面拖拽一个TextBox和两个按钮,一个按钮用来读出Person的值,一个是用来修改Person的值:


先给TextBox命名为text1以便后面使用。

双击读取的按钮,跳转到了后台的c#文件。

在类中声明一个Person对象:        Person myPerson = new Person();

然后在OnNavigatedTo方法中判断,如果是NavigationMode.New则设置text1的DataContent为前面声明的myPerson。

这里可以把DataContent理解为数据源。

然后点击按钮的监听方法里,将读取到的Person内容显示出来,在点击第二个按钮的时候将Person的name显示为当前的毫秒数值。

完整的代码如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Popups;
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 TestData
{
    /// <summary>
    /// 可用于自身或导航至 Frame 内部的空白页。
    /// </summary>
    public sealed partial class MainPage : Page
    {

        Person myPerson = new Person(){ Name = "why" , Age = 20 }