面朝大海 春暖花开

天行健,君子以自强不息; 地势坤,君子以厚德载物; 宠辱不惊,闲看庭前花开花落; 去留无意,漫随天外云卷云舒。 不妄取,不妄予,不妄想,不妄求, 与人方便,随遇而安。 ——《周易》

导航

十二、数据绑定——基本

三种绑定模式:one time(一次性绑定)  oneway(单向绑定,model变 Ui变;Ui变  model不变) twoway(双向绑定,model变 Ui变;Ui变  model变)

两个控件之间的简单绑定

第一步:在xaml文件中

在需要绑定的控件中加入:此控件的属性=“{Binding  Path=另一个控件的属性,Mode=One Time/OneWay/TwoWay,ElementName=控件的名字}”

例如: Text="{Binding Path=Value,Mode=TwoWay,ElementName=slider1}"

对象的绑定

第一步:封装一个对象

//实现一个借口,监听发生改变

public class Person:INotifyPropertyChanged 
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value; //值发生改变
                //如果值(自己)发生改变,则发出事件,让绑定的控件改变
                if (PropertyChanged != null)
                {
                    //new PropertyChangedEventArgs("Name"),说明那个属性发生变化
                    PropertyChanged(this,new PropertyChangedEventArgs("Name") );
                }
            }
        }
        private int _age;
        public int Age
        {
            get
            {
                return _age;
            }
            set
            {
                _age = value;
                if (PropertyChanged != null)
                {
                    //new PropertyChangedEventArgs("Name"),说明那个属性发生变化
                    PropertyChanged(this, new PropertyChangedEventArgs("Age"));
                }
            }
        }
        //监听事件:告知对方自己发生变化,使对方做出改变
       public  event PropertyChangedEventHandler  PropertyChanged;
      
    }

第二步:在.cs文件中

1、声明对象:private Person p = new Person() {Name="dfdffdfd",Age=23 };

2、在OnNavigatedTo方法中,加上 
            if (e.NavigationMode == NavigationMode.New)
            {
                //首次进入此页面,此时可以加载数据
                txt1.DataContext = p;

              //子控件会自动继承父控件的数据源。

             //如果某个控件的间接父控件(爷爷控件)和直接父控件都定义了数据源,则此控件的数据源使用直接父控件的数据源

              // this.DataContext = p;
            }

3、响应事件

  private void Button_Click_1(object sender, RoutedEventArgs e)        

{            

          MessageDialog msg = new MessageDialog(p.Name);           

           msg.ShowAsync();

        }

        private void Button_Click_2(object sender, RoutedEventArgs e)       

  {            

         p.Name = DateTime.Now.Millisecond.ToString();        

}

第三步:在XAML文件中绑定

 Text="{Binding Name ,Mode=TwoWay}"  //将一个控件的text属性  绑定到数据源的  Name属性

 

 

posted on 2012-12-06 11:09  gentle_girl  阅读(175)  评论(0编辑  收藏  举报