Binding bindingID = new Binding() { Path = new PropertyPath

时间:2022-05-31 06:41:42

  Binding作为数据的桥梁,连通业务逻辑层的东西(源东西)和UI的控件东西(方针东西)。在这座桥梁上,我们不只可以控制在源东西与方针东西是双向通行还是单向通行。还可以控制数据的放行时机,甚至可以在这座桥上搭建一些关卡用来转换数据类型或者查验数据的正确性

我们先做一个最根基的例子,

创建一个"Student"类,这个类的实例将作为数据源来使用

public class Student { private int _id; public int ID { get { return _id; } set { _id = value; } } private string _name; public string Name { get { return _name; } set { _name = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } }

然后我们编写我们的控件东西和创建逻辑东西

<StackPanel Name="stack1"> <TextBox Width="120" Text="{Binding Path=ID}" HorizontalAlignment="Left" Name="txt_ID"></TextBox> <TextBox Width="120" Text="{Binding Path=Name}" HorizontalAlignment="Left" Name="txt_Name" ></TextBox> <TextBox Text="{Binding Path=Age}" Width="120" HorizontalAlignment="Left" Name="txt_Age"></TextBox> </StackPanel>

public Student Stu; public MainWindow() { InitializeComponent(); Stu = new Student { ID = 1, Name = "狗娃", Age = 11 };
       //设置元素数据绑定东西 stack1.DataContext
= Stu; }

我们可以看到TextBox控件的Text是一个{Binding} 这就是数据绑定的关键字。然后Path属性是需要绑定的属性,然后我们运行就可以看到我们已经绑定OK。

上面我们是使用的界面进行绑定,其实我们还可以使用代码对每一个控件进行绑定。此刻我们将WPF界面中的绑定删除去

<StackPanel Name="stack1"> <TextBox Width="120" HorizontalAlignment="Left" Name="txt_ID"></TextBox> <TextBox Width="120" HorizontalAlignment="Left" Name="txt_Name" ></TextBox> <TextBox Width="120" HorizontalAlignment="Left" Name="txt_Age"></TextBox> </StackPanel>

然后我们使用代码来进行控件绑定

public Student Stu; public MainWindow() { InitializeComponent(); Stu = new Student { ID = 1, Name = "狗娃", Age = 11 }; //创建Binding东西. Binding bindingID = new Binding() {Path = new PropertyPath("ID"),Source=Stu }; //Binding结构参数可以直接传入Path参数 Binding bindingName = new Binding("Name") { Source = Stu }; Binding bindingAge = new Binding("Age") { Source = Stu }; //进行控件绑定(第一个参数是将绑定到哪个属性,第二个参数是绑定东西) this.txt_ID.SetBinding(TextBox.TextProperty, bindingID); this.txt_Name.SetBinding(TextBox.TextProperty, bindingName); this.txt_Age.SetBinding(TextBox.TextProperty,bindingAge); }

可以看到使用代码绑定需要创建Binding东西,然后使用控件的SetBinding要领进行绑定,但是郁闷的我们为了绑定这三个属性要写这么多的代码.所以使用哪种方法绑定看需求来使用.

接下来我们看双向绑定,其实上面阿谁我们已经实现了双向绑定,我们先做一个例子测试

创建一个测试TextBox并绑定数据ID

<TextBox HorizontalAlignment="Left"></TextBox>

Binding bindingTestID = new Binding() { Path = new PropertyPath("ID"), Source = Stu }; this.txt_IDTest.SetBinding(TextBox.TextProperty, bindingTestID);