(八)Binding

下面进行介绍一个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();//定义bindg
binding.Source = stu;//指定实例数据源
binding.Path = new PropertyPath("Name");//指定访问路径即绑定哪一个属性。
BindingOperations.SetBinding(this.comboBox,ComboBox.ItemsSourceProperty,binding);//把数据源与目标连在一起。

结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值