WPF接触时间不长,作为学习笔记记录下来,以便复习加深理解,其中部分图是书籍截取,文章末尾是参考书籍。
WPF的核心是数据驱动UI,Binding作为最重要的体现之一,理解并使用它将变得相当重要。
Binding是数据的桥梁,数据从哪里来哪里就是Source(源),到哪里去哪里就是Target(目标)。简单来说Source是逻辑层的对象;而Target一般指的是UI层的控件对象。这样的话就实现了数据驱动UI。Binding作为中间的桥梁,他跟我们生活中的桥梁就很相似,可以在桥梁上设置“关卡”,也可以设置“放行方向”,比如只允许单向通行。
1.1Binding是有源与路径的
为了偷懒,直接上资料图,正常情况下我是不会在view层底下写逻辑代码,为什么举这个例子,还是让我们便于理解
我在上面说了源一般是逻辑层的对象,这里创建一个Student对象
开始关联
目标指的是哪一个控件,这里指的是UI层的名为textBoxName的TextBox控件。
binding里面的数据源是stu(Student对象的一个实例),路径是Path=Name (Student对象里面的一个属性),也就是说,我们将数据源stu中的属性Name与名为textBoxName的TextBox控件的属性Text关联起来了。到此我们就实现了Binding的绑定功能。
这里好像跟我们平常写的不一样,解释如下:
由此可见xaml是可以更方便的设置Binding.另外从这也可以看出,Binding也可以让一些UI元素进行关联(这里是TextBox的Text关联了slider的value值),这是将控件作为binding源与binding标记扩展。
1.2Binding是可以控制其方向和更新方式的
Binding控制数据流向的属性是Mode,是 BindingMode枚举。取值为:
-TwoWay 双向绑定,顾名思义就是源改变,目标属性(啥是目标,看1.1))跟着变,反着来也可以
- OneWay 单项绑定,源改变,目标属性变
- OnTime 只要根据源来设置目标,以后都不会变 - OneWayToSource 与OneWay相反
- Default 可以单向或双向,是靠被指定的源或目标是否有get或set来指定的。
-Default一般系统自动适配,比如可编辑的textbox采用双向模式,只读的比如textblock采用单向
我们在使用textBox时,有时候想等鼠标移出Textbox后才让此值进行更新,有时候也可能是在改变文本框值时就更新通知,此时就涉及到数据更新方式。
UpdateSourceTrigger的默认值是Default,其他值有PropertyChanged、LostFocus和Explicit。
PropertyChanged:属性改变立即更新
情景如下:
LostFocus:失去焦点才更新
Explicit:手动推送才更新。手动推送这里说一下怎么使用:
情景是在TextBox中输入值后,旁边加个按钮,点击按钮控制更新。
//XAML
// C# 代码手动更新
private void btnUpdateSource_Click(object sender, RoutedEventArgs e)
{
BindingExpression binding = txtWindowTitle.GetBindingExpression(TextBox.TextProperty);
binding.UpdateSource();
}
参考书籍:WPF深入浅出
内存不够了,说完这一小部分该清清电脑了。
总结:
Binding是有源与路径的,在一些情况下会简写(后面章节会继续说明),Binding是可以控制数据流向以及更新触发条件。特别是更新触发UpdateSourceTrigger枚举,例如Textbox是默认失去焦点更新,有时候不符合我们的一个期望,所以会拿出来进行设置。不是每个控件都需要拿出来设置,具体场合具体需求具体分析。
留言与评论(共有 0 条评论) “” |