(八)Binding

来源:互联网 发布:java url连接 编辑:程序博客网 时间:2024/06/05 04:10

下面进行介绍一个Binding的最简单用法:

我们首先创建一个Students类包含一个学生姓名的列表的属性。这个类的实例将会作为数据源.

class Students{      private List<string> name = new List<string>();      public List<string> Name =  public List<string> Name       {                get { return name; }                set { name = value;}      }}

现在这个Students类的Name属性是普通属性,无法通知Binding,所以Binding也就无法把属性值的变化传给UI元素,下面我们在属性的Set方法中激发一个PropertyChanged事件,这个事件不需要我们实现,我们需要实现INotifyPropertyChanged接口:

 class Students : INotifyPropertyChanged        {            private List<string> name = new List<string>();            public List<string> Name {                get { return name; }                set {                        name = value;                        if (PropertyChanged != null)                        {                            this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));                        }                }            }            public event PropertyChangedEventHandler PropertyChanged;        }

这时当Name属性的值发生变化时PropertyCharged事件就会被激发,bingding接收到这个事件后发现事件告诉他”Name”属性的值发生变化,于是Binding就会通知目标端的UI元素显示新的值。

下面给出完整的一个小例子:

XAML:

<Grid>    <StackPanel>        <ComboBox x:Name="comboBox" Margin="5"/>        <Button Margin="5" Click="Button_Click">Add Age</Button>    </StackPanel></Grid>

对应的cs代码

 public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            //重点在这进行binding            this.comboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding("Name") {Source = stu});        }        class Students:INotifyPropertyChanged        {            private List<string> name = new List<string>();            public List<string> Name {                get { return name; }                set {                        name = value;                        if (PropertyChanged != null)                        {                            this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));                        }                }            }            public event PropertyChangedEventHandler PropertyChanged;        }        private Students stu = new Students();        List<string> names = new List<string>();        private void Button_Click(object sender, RoutedEventArgs e)        {            names.Add("Hello");            names.Add("World");            names.Add("Binding");            names.Add("\n");            stu.Name = null;            stu.Name = names;        }    }

上面有注释那句代码

this.comboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding("Name") {Source = stu});

我们进行分解(下面代码等价与上面那句):

Binding binding = new Binding();//定义bindgbinding.Source = stu;//指定实例数据源binding.Path = new PropertyPath("Name");//指定访问路径即绑定哪一个属性。BindingOperations.SetBinding(this.comboBox,ComboBox.ItemsSourceProperty,binding);//把数据源与目标连在一起。

结果:
这里写图片描述

原创粉丝点击