【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}" />

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

原文地址:https://www.cnblogs.com/bomo/p/2767833.html