数据绑定是WPF不得不提,不得不会系列之一

数据绑定简言之,就是把数据源的数据绑定到目标对象的属性上。目标对象可以是承自DependencyProperty的任何可访问的属性或控件,目标属性必须为依赖属性(下节讲),数据源可以是其他控件的属性,可以是对象实例、XAML 元素、ADO.NET Dataset、XML数据。

数据绑定的重点属性- Mode属性:

MSDN给出如下图标记了三种你来我往的数据流向。比较简单,看图就能明白。

数据绑定的重点属性- UpdateSourceTrigger属性:

当在实际项目使用TextBox输入数据时,可能会有TextBox.Text 的值没有及时反馈到源数据,加上UpdateSourceTrigger=“PropertyChanged”,就能及时通知反馈,但也会降低一些性能,毕竟一直干活谁都会累。

数据绑定的重点属性- Source属性:

可以自己定义数据,使用Source直接指定作为数据源。

<Window.Resources>
<local:Person x:Key="myDataSource" PersonName="Joe"/>
</Window.Resources>
<Grid Width="200" Height="30" >
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>
</Grid>

数据绑定的重点属性- ElementName属性:

有些时候,需要直接指定绑定源,如控件A的属性A1要绑定到控件B的属性B1上:

<ComboBox x:Name="testCbb">
<ComboBoxItem>123</ComboBoxItem>
<ComboBoxItem>456</ComboBoxItem>
</ComboBox>
<TextBlock Text="{Binding ElementName= testCbb,Path=SelectedItem.Content}"></TextBlock>

数据绑定的重点属性- RelativeSource属性:

在自定义控件时,很多情况下目标控件属性和绑定源不在同一个层次,需要使用RelativeSource来指定绑定源的位置。

<Grid x:Name="g1" Background="Red" Margin="10">
<DockPanel Name="d1" Background="Orange" Margin="10">
<Grid x:Name="g2" Background="Yellow" Margin="10">
<DockPanel Name="d2" Background="LawnGreen" Margin="10">
<TextBox Name="textbox" FontSize="24" Margin="10"
Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid},AncestorLevel=1},Path=Name}"/>
</DockPanel>
</Grid>
</DockPanel>
</Grid>

数据绑定的重点属性- Converter属性:

比如点击CheckBox显示或隐藏某些内容,代码如下。可以根据需要做各种转换,也可以绑定集合。

public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool) value ? Visibility.Visible : Visibility.Collapsed;
} public object ConvertBack(object value, Type targetType, object parameter,CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window.Resources>
<local:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"></local:BoolToVisibilityConverter>
</Window.Resources> <Grid>
<CheckBox x:Name="checkBox" Grid.Column="0" Content="Test" />
<Border Background="Red" Height="100" Width="100" Visibility="{Binding Converter={StaticResource BoolToVisibilityConverter} ,ElementName=checkBox,Path=IsChecked}"></Border>
</Grid>

数据绑定的重点属性 - NotifyOnValidationError属性:

当该属性设为True时,会验证输入是否符合指定规则,若不符合则会提示相应错误。

<StackPanel>
<TextBox x:Name="textBoxAge" Width="100">
<TextBox.Text>
<Binding Path="Age" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:AgeRule Max="100" Min="0"></local:AgeRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBlock Text="{Binding ElementName=textBoxAge, Path=(Validation.Errors)[0].ErrorContent}" />
</StackPanel>

对应WPF验证部分,比较复杂,可以定制各种报错提示,有机会单独记录下,此处不再深究。

WPF知识点全攻略07- 数据绑定(Binding)的更多相关文章

  1. WPF知识点全攻略00- 目录

    知识点目录如下: 1.WPF相对WinFrom的优缺点 2.WPF体系结构 3.XAML 4.XAML页面布局 5.XAML内容控件 6.WPF中的“树” 7.Binding 8.依赖属性 9.附加属 ...

  2. WPF知识点全攻略08- 依赖属性

    依赖属性是WPF不得不提,不得不会系列又一 先来看一下,自定义依赖属性的写法 public static readonly DependencyProperty IconProperty = Depe ...

  3. WPF知识点全攻略02- WPF体系结构

    WPF体系结构图: PersentationFramework.dll包含WPF顶层的类型,包括哪些表示窗口.面板以及其他类型控件的类型.他还实现了高层编程抽象,如样式.开发人员直接使用的大部分类都来 ...

  4. WPF知识点全攻略01- WPF相对WinFrom的优缺点

    对比WPF和WinFrom前,先来了解下GUI现阶段在用的其他一些开发技术: MFC:微软基础类库,以C++的形式封装了Windows API,加上一些实用工具类. QT:奇趣科技开发的跨平台C++图 ...

  5. WPF知识点全攻略11- 命令(Command)

    先看一下命令的简单使用: <Window.CommandBindings> <CommandBinding Command="ApplicationCommands.Cut ...

  6. WPF知识点全攻略10- 路由事件

    路由事件是WPF不得不提,不得不会系列又一 先来看一下他的定义: 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 C ...

  7. WPF知识点全攻略09- 附加属性

    附加属性也是一种特殊的依赖属性. Canvas中的Canvas.Left,Canvas.Top ,DockPanel中DockPanel.Dock等就是附加属性. 更加.NET类属性的写法经验.这个中 ...

  8. WPF知识点全攻略06- WPF逻辑树(Logical Tree)和可视树(Visual Tree)

    介绍概念之前,先来分析一段代码: xaml代码如下: <Window x:Class="WpfApp1.MainWindow" xmlns="http://sche ...

  9. WPF知识点全攻略05- XAML内容控件

    此处简单列举出布局控件外,其他常用的控件: Window:WPF窗口 UserControl:用户控件 Page:页 Frame:用来浏览Page页 Border:嵌套控件,提供边框和背景. Butt ...

随机推荐

  1. Bootstrap表格分页(二)

    本文使用Bootstrap-table来对表格进行分页,关于Bootstrap-table以及下载插件包请点击官网:http://bootstrap-table.wenzhixin.net.cn 首先 ...

  2. 使用JavaScript选择GridView行的方法汇总

    一行: e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.gvUsers, &q ...

  3. c#静态多态性与动态多态性

    C# 多态性 多态性意味着有多重形式.在面向对象编程范式中,多态性往往表现为"一个接口,多个功能". 多态性可以是静态的或动态的.在静态多态性中,函数的响应是在编译时发生的.在动态 ...

  4. 网络编程-TCP连接-length

    在使用readLine方式时,常常会遇到因为没有结束标记,而导致阻塞现象. 如果不想使用结束标记,这里可以使用一个固定长度的byte[],来获取流. server package com.net.tc ...

  5. 16-CoreData之多表关联(存储自定义数据模型)

    多表关联 1.1-简介 什么是多表关联 在处理数据库的关系中,无非只有三种关系 一对一:一个老师只能在一个教室上课,不可能同时在两个教室上课 一对多:一个教室可以有多个学生,但一个学生只能在一个教室 ...

  6. CodeForces 689B【最短路】

    题意: 给你一副图,给出的点两两之间的距离是abs(pos1-pos2),然后给你n个数是表示该pos到x的距离是1. 思路: 直接建边,跑spfa就好了.虽然说似乎题意说边很多,其实只要建一下相邻的 ...

  7. element走过的坑

    1.想要更改表头颜色,只要在el-table里引入 :header-cell-style="{background:'red'}" 2.el-form自定义表单验证 , 但是左边不 ...

  8. 【OpenJ_Bailian - 4137】最小新整数 (贪心)

    最小新整数 Descriptions: 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m.现在从m位中删除k位(0<k < ...

  9. redis-分布式锁2

    https://wudashan.cn/2017/10/23/Redis-Distributed-Lock-Implement/ 站在巨人的肩膀上 本博客使用第三方开源组件Jedis实现Redis客户 ...

  10. G - You Are the One(需要重想一遍)

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...