黑马程序员c#学习7

来源:互联网 发布:渗透软件 编辑:程序博客网 时间:2024/05/20 23:36
Windows Phone 7手机开发、.Net培训、期待与您交流!

 

1、数据绑定基础

   数据绑定在一定程度上避免了在代码中直接操作控件,也是mvc等开发模式的基础
  
   数据绑定的基本步骤

   一、定义一个类和属性,用来存储我们需要绑定的值

   二、new一个类的实例,给需要绑定数据的控件设定DataContext属性

   三、在XAML中给控件使用Text={binding 属性名}的形式来绑定一个数据。

   比如  我们有两个TextBox控件,需要绑定名字和年龄两个数据,步骤如下

   一、定义一个类和相关属性,用来存储我们需要绑定的值

       public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
 public int gender{ get; set; }
   
    } 

   二、new一个类的实例,给需要绑定数据的控件设定DataContext属性

           Person p1 = new Person();//实例化一个类,并给对象属性赋值,
            p1.Name = "AAA";
            p1.Age= 18;
            textBox1.DataContext=p1;//设定控件的数据上下文,
            textBox2.DataContext = p1;//设定控件的数据上下文,

   三、在XAML中给控件使用Text={binding 属性名}的形式来绑定一个数据

       <TextBox Text="{Binding Name}" Name="textBox1" VerticalAlignment="Top" Width="120" />
       <TextBox Text="{Binding Age}"   Name="textBox2" VerticalAlignment="Top" Width="120" />

   这样 ,我们就将person类的两个属性的值绑定到了两个控件上,

   总结  ,控件的DataContext属性指明了我们需要绑定的数据来源,然后,控件的Text="{Binding Name}

语法告诉我们,绑定的是数据是来源与数据源的Name属性,通过这样设置,我们在代码中就避免了使用

textBox1.Text = p1.Name 这样的语句来直接操作控件。这样做还有一个好处就是,如果我们要修改

textBox1所要显示的数据,比如要显示 person类的gender属性,那么我们不必去代码中修改

textBox1.Text = p1.gender,而是直接在XAML文件中修改textBox1的绑定属性就行了,即

<TextBox Text="{Binding gender}" Name="textBox1" VerticalAlignment="Top" Width="120" />

2、INotifyPropertyChanged接口

    通过实验我们看到,我们在代码中修改p1的Age属性,界面上的文本框的值并没有修改,但是 我们在界面上修改文本框的值,那么他所对应的对象的值会改变。

    INotifyPropertyChanged接口的工作就是当我们在后台直接修改对象属性的时候,界面中也会同步更新修改后的属性。

    我们需要注意,当我们要实现这种功能的时候,我们必须使我们的类实现这个接口,即person类的定义必须修改如下

     public class Person : INotifyPropertyChanged //实现INotifyPropertyChanged接口
    {
        private string name;
        private int age;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                this.name = value;
                if ( PropertyChanged!= null )  //判断是否有监听程序
                {
                    PropertyChanged (this,new PropertyChangedEventArgs("Name") );
                }
            }
        }
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                this.age = value;
                if ( PropertyChanged != null )
                {
                    PropertyChanged ( this, new PropertyChangedEventArgs ( "Age" ) );
                }
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

   由于我们需要监听属性的set方法,所以我们不能再使用自动属性了,必须手动的来书写我们的属性set方法,
   if ( PropertyChanged!= null )  //判断是否有监听程序
                {
                    PropertyChanged (this,new PropertyChangedEventArgs("Name") );
                }
这段代码的意义可以理解为,当我们配置了一个监听程序来监听属性是否改变,如果配置了,当属性发生改变时,将通知界面,我的属性已经改变,请及时修改。

 

Windows Phone 7手机开发、.Net培训、期待与您交流!