前面两节介绍了通过把CLR对象指定赋值给Binding . Source或者把CLR对象的名称赋值给Binding.ElementName而实现将单个CLR对象指定为Binding的Source的方法。下面我们介绍没有Source的Binding,将DataContext作为Binding的源的方法。
DataContext,顾名思义就是数据上下文,它被定义在FrameworkElement类里,这个类是WPF控件的基类,包括所有的WPF控件和容器都含有这个属性。我们又知道,WPF的UI布局是树形结构,树的每个节点都是控件,就是说每个节点元素都有DataContext。
当一个Binding只知道自己的Path而不知道自己的Source时,它会沿着UI树一级一级的向上查找,路过每个节点时都会查看这个节点的DataContext是否具有Path所指定的属性,知道找到为止。如果到了树的根部,还没找到那就是没有Source。
为了验证这一点,我们还是先定义个Student类:
public class Student
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
然后再XAML文件中添加如下代码:
<local:Student Id="1" Name="Hyman" Age="29"/>
</Grid.DataContext>
<TextBox Height="23" HorizontalAlignment="Left" Margin="184,59,0,0" Name="textBox1" VerticalAlignment="Top" Width="120"
Text="{Binding Path=Id}"/>
<TextBox Height="23" HorizontalAlignment="Left" Margin="184,105,0,0" Name="textBox2" VerticalAlignment="Top" Width="120"
Text="{Binding Path=Name}"/>
<TextBox Height="23" HorizontalAlignment="Left" Margin="184,160,0,0" Name="textBox3" VerticalAlignment="Top" Width="120"
Text="{Binding Path=Age}"/>
<TextBlock Height="23" HorizontalAlignment="Left" Margin="114,62,0,0" Name="textBlock1" Text="ID:" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="114,160,0,0" Name="textBlock2" Text="Name:êo" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="114,105,0,0" Name="textBlock3" Text="Age:êo" VerticalAlignment="Top" />
</Grid>
另外为了实现这一效果,我们也可以在cs代码中定义一个Student对象,然后将其赋值给grid的DataContext。
Student student = new Student()
Id = 1,
Name = "Hyman",
Age = 29
this.grid.DataContext = student;
前面两节介绍了通过把CLR对象指定赋值给Binding . Source或者把CLR对象的名称赋值给Binding.ElementName而实现将单个CLR对象指定为Binding的Source的方法。下面我们介绍没有Source的Binding,将DataContext作为Binding的源的方法。DataContext,顾名思义就是数据上下文,它被定义在FrameworkElement类里
1)在FrameworkElement类下有两个重要的属性。利用这两个属性,可以实现UI数据直接与后台的类进行绑定2)前端UI界面属性值等动态与后台绑定的方式有多种,此处列出后台设置DataContext以及前端设置DataContext的两种方式,以及数据双向绑定的最佳实践纯前端的方式好处在于,编译一下,就可以在设计阶段看到效果。
1)先定义好我们的类
2)在前端按照步骤引入
后台设置DataContext
在设计阶段是看不到效果的,但是灵活性更高,属性值不用写死
1)定义一个类
2)在当前窗口加载时,进
UI元素树的每一个结点都有DataContext,当Binding只知道自己的path ,而不知道source时,会沿着 UI元素树一路的向树根部找过去,路过节点,比较结点的DataContext是否具有Path所指定的属性,有的话,把对应的节点对象作为自己的source
C# class
单个CLR类型对象指定为Binding的Source,方法有两个—把对象赋值给binding.Source属性或者把对象的Name赋值给Binding.ElementName。DataContext属性被定义在FrameworkElement类里,这个类是WPF的基类,这意味着所有WPF控件都具备这个属性。
WPF的UI布局是树形结构,这颗树的每个结点都是控件,由此,得出另外一个结论,在UI元素树的每个结点都有DataContext。 这点非常重要,因为当一个Binding只知道自己的Path而...
Binding基础
Binding在韩语中时绑定,实际上引文中动词Bind在转化为名词Binding后,除了原有的绑定的意思外,还引申除了“关联”和“建联”的含义。也就是说Binding更注重表达它是一种像桥梁一样的关联关系。WPF中,正式在这段桥梁上我们有机会为往来流通的数据做很多事情。
如果把Binding比作数据的桥梁,那么它的两端分别是Binding的源(Source)和目标(Targ
前面的例子都是将CLR类型的对象指定为Binding的Source,使用了两种方法——把对象赋值个Binding.Source或把对象的Name赋值给Binding.ElementName。
DataContext属性被定义在FrameworkElement类中,这个类是WPF控件的基类,意味着所有WPF空间都具备这个属性。WPF的UI布局是树形结构,每个节点都是空间,由此可以推出另一个结论——
对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。
a9863442698:
对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。
a9863442698: