zoukankan      html  css  js  c++  java
  • 【WP7】数据绑定

    概念就不说了,直接将用法

      数据绑定有 数据源Source,和目标Target,还有一个转换器Converter,把数据源通过转换器绑定到目标上,转换器是转换数据源的格式

    分为单向绑定OneWay,双向绑定TwoWay,一次绑定OneTime

    首先演示一下,把Slider控件的Value绑定到TextBlock控件的文字上,这样就可以通过Slider控制文本框的文本内容了

            <Slider Height="84" Name="slider1" Width="399" Maximum="100" Minimum="20" />
            <TextBlock Name="textBlock1" Text="{Binding ElementName=slider1, Path=Value, Mode=TwoWay}" />

    上面代码是吧 slider1的Value属性绑定到textBlock1控件的Text属性上

    但是有个问题,这个数据位数太长了,我们希望把这个数值进行处理后在显示出来,比如,我们只显示整数值,不要这么长的浮点数

    接下来我们要用到转换器 Converter,这个转换器可以我们自己定义,这样就可以通过它来控制数值的显示了,下面将用法

      首先,定义一个转换器类,这个类继承于接口 IValueConverter ,这个接口需要实现两个函数 Convert 和 ConverterBack

            public class MyValueConverter : IValueConverter
            {
                public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    double doubleValue = (double)value;
                    return (int)doubleValue;
                }
    
                public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    return value;
                }
            }

      然后,在数据绑定的时候设置Converter,先把MyValueConverter设置成资源(也可以设置成全局资源App.xaml,这里设置成页面资源)

            <phone:PhoneApplicationPage.Resources>
                <local:MyValueConverter x:Key="valueConverter" />
            </phone:PhoneApplicationPage.Resources>
            <TextBlock Name="textBlock1" Text="{Binding ElementName=slider1, Path=Value, Mode=TwoWay, Converter={StaticResource valueConverter}}" />

        把传入的double值转化为int ,然后返回,这样textBlock1显示出来的值就是整数的了

      再说一下绑定模式Mode,这个很好理解,就不废话了

        OneTime   只绑定一次

        OneWay   单向绑定

        TwoWay   双向绑定

      

    接下来说说给页面绑定数据,和数据源的定义

      首先,我们定义一个自己的数据源Person

            public class Person:INotifyPropertyChanged
            {
                string _name;
                int _age;
                
                public Person(string name, int age)
                {
                    this._name = name;
                    this._age = age;
                }
    
                public event PropertyChangedEventHandler PropertyChanged;
                protected void OnPropertyChanged(PropertyChangedEventArgs e)
                {
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, e);
                    }
                }
    
    
                public string Name 
                {
                    get { return _name; }
                    set
                    {
                        _name = value;
                        OnPropertyChanged(new PropertyChangedEventArgs("Name"));
                    }
                }
                public int Age 
                {
                    get { return _age; }
                    set
                    {
                        _age = value;
                        OnPropertyChanged(new PropertyChangedEventArgs("Age"));
                    }
                }
            }

      数据源需要继承接口:INotifyPropertyChanged,该接口是实现向客户端(一般是执行绑定的客户端)发出属性更改的通知,不然属性后是不会直接更新到绑定端的

        定义事件          public event PropertyChangedEventHandler PropertyChanged;

        定义通知函数        protected void OnPropertyChanged(PropertyChangedEventArgs e)

        在属性改变时调用通知函数  OnPropertyChanged(new PropertyChangedEventArgs("Name"));

      

      有了数据源,接下来是绑定到页面

      在页面构造函数中

            public MainPage()
            {
                InitializeComponent();
                
                Person p = new Person("bomo", 20);
                this.DataContext = p;
            }

      在xaml文件中用两个TextBlock控件绑定该数据

            <TextBlock Height="30" Name="textBlock1" Text="{Binding Name}" />
            <TextBlock Height="30" Name="textBlock2" Text="{Binding Age}" />

      好了,这就实现了数据源的定义和数据的绑定

  • 相关阅读:
    “图灵&博客园&互动网有奖书评征集活动——微软技术系列”评选结果
    像优秀的SQL程序员一样思考
    倚天·屠龙——唯我独尊
    CSS与HTML设计模式全集(350余种)
    游览器兼容冲突的常见css
    嵌入多媒体文本
    删除确认代码
    用!important解决IE和Mozilla的布局差别
    四大游览器兼容问题综合实例
    jQuery事件之鼠标事件
  • 原文地址:https://www.cnblogs.com/bomo/p/2767833.html
Copyright © 2011-2022 走看看