自学WPF之Binding(一)
Binding的重要性就不作介绍了,是作为数据交互的支撑,下面来介绍一下为Binding指定源(Source)的几种方法:
- 把普通CLR类型的单个对象指定为Source:包括.NET Framework自带类型的对象和用户自定义类型的对象。如果类型继承了INotifyPropertyChanged的接口,则可以通过在属性的set激发PropertyChanged事件来通知绑定数据已经更新。
- 把普通CLR集合类型对象指定为Source:包括数组。List<T>、ObservableCollection<T>等集合类型。实际工作中,我们常把一个集合作为ItemsControl的派生类的数据源来使用,一般把控件的ItemsSource属性使用binding关联到一个集合对象上。
- 把ADO.NET数据对象指定为Source:包括DataTable、DataView等对象。
- 使用XMLDataProvider把XML数据指定为Source:用于级联式控件绑定数据源,如TreeView、menu等,Binding关联到树状结构的Xml上。
- 把依赖对象(Dependence Object)指定为Source:依赖对象不仅可以作为Binding的目标,同时也可以作为Binding的源。依赖对象的属性可以作为Binding的path。
- 把容器的DataContext 指定为Source:先建立一个Binding,只给它设置path而不设置Source,这时候Binding会自动把控件的DataContext当作自己的Source(它会沿着控件树一层一层往外找直到找到带有path制定属性的对象为止)。
- 通过ElementName指定Source:在C#里可以直接把对象赋值给Binding,但Xaml无法访问对象,只能用NAME属性,来找到对象。
- 通过Binding的RelativeSource属性相对的指定Source:当空间需要关注自己的、自己容器的、或者自己内部元素的某个值就需要使用这种方法。
- 把ObjectDataProvider对象指定为Source:当数据源的数据不是通过属性而是通过方法暴漏给外界的时候,我们可以使用这两种对象来包装数据源再把他们作为指定的Source。
- 把使用LINQ检索的得到的数据作为Binding对象。
下面我们来介绍每一种情况。
(1)继承了INotifyPropertyChanged的接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel; namespace MyFirstWPFTest
{
public class Employee:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name; public string Name
{
get { return _name; }
set {
_name = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
}
}
}
private int _age; public int Age
{
get { return _age; }
set { _age = value; }
} }
}
前台设计代码:
<Window x:Class="MyFirstWPFTest.BindingPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="BindingPage" Height="300" Width="300">
<StackPanel>
<TextBox Name="txtName" BorderBrush="Black" Margin="5"></TextBox>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition>
</ColumnDefinition>
<ColumnDefinition>
</ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Content="Cancel" Grid.Column="0" Height="23" Name="Cancel" Click="Cancel_Click" Width="75" />
<Button x:Name="btnOK" Grid.Column="1" Width="78" Click="btnOK_Click">Add Age</Button>
</Grid>
</StackPanel>
</Window>
后台逻辑代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes; namespace MyFirstWPFTest
{
/// <summary>
/// BindingPage.xaml 的交互逻辑
/// </summary>
public partial class BindingPage : Window
{
Employee em;
public BindingPage()
{
InitializeComponent();
//em = new Employee();
//Binding binding = new Binding();
//binding.Source = em;
//binding.Path = new PropertyPath("Name");
//BindingOperations.SetBinding(this.txtName, TextBox.TextProperty, binding);
this.txtName.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = em = new Employee() });
} private void btnOK_Click(object sender, RoutedEventArgs e)
{
em.Name += "lily";
} private void Cancel_Click(object sender, RoutedEventArgs e)
{
this.txtName.Text = "";
}
}
}
运行效果:
同样绑定也可以在前台实现:
<TextBox Name="txtbind" Text="{Binding Path=Value,ElementName=silder1}" BorderBrush="Black" Margin=""/>
<Slider Name="silder1" Maximum="" Minimum="" Margin=""/>
运行效果:
这里需要说明一下,如果在文本框里输入数字,当光标离开文本框时,silder会随之变化,之所以在losefocus后变化是因为UpdateSourceTrigger属性的值,当需要输入值以后就随之变化的话,需将UpdateSourceTrigger属性值设置为PropertyChanged。
自学WPF之Binding(一)的更多相关文章
- 自学WPF之Binding(二)
没有Source的Binding,使用ContentText作为Binding源: 上一篇是把CLR类型对象当作指定为Binding的Source,两种方法:一是把对象赋值给Binding.Sourc ...
- WPF之Binding深入探讨
原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...
- WPF数据绑定Binding(二)
WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...
- WPF的Binding功能解析
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- 【转】WPF中Binding的技巧(一)
WPF中Binding的技巧(一) 在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到 ...
- WPF之Binding的使用
引出: 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件 ...
- WPF之Binding深入探讨--Darren
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- 深入浅出WPF之Binding的使用(一)
在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件对象:这 ...
- WPF之Binding【转】
WPF之Binding[转] 看到WPF如此之炫,也想用用,可是一点也不会呀. 从需求谈起吧: 首先可能要做一个很炫的界面.见MaterialDesignInXAMLToolKit. 那,最主要的呢, ...
随机推荐
- web前端-----第二弹CSS
web前端之CSS样式 CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. ''' selector { property: value; property: value; ...
- Python闭包
1.概述 闭包是在其词法上下文中引用自由变量的函数. >>> def foo(): ... m=3 ... n=5 ... def bar(): ... a=4 ... return ...
- SpringMVC---CookieValue
配置文件承接一二章 @CookieValue的作用 用来获取Cookie中的值 1.value:参数名称 2.required:是否必须 3.defaultValue:默认值 原网址:https:// ...
- MVC 小案例 -- 信息管理
前几次更新博客都是每次周日晚上到周一,这次是周一晚上开始写,肯定也是有原因的!那就是我的 Tomact 忽然报错,无法启动,错误信息如下!同时我的 win10 也崩了,重启之后连 WIFI 的标志也不 ...
- NetFlow学习笔记
NetFlow学习笔记 标签: netflow 由于工作需要,对NetFlow做了一些学习和调研,并总结成文档以供学习分享. 背景:随着系统的升级与漏洞的修补,入侵主机进而进行破坏的病毒攻击方式在攻击 ...
- Vue-cli创建项目从单页面到多页面2-history模式
之前讲过怎样将vue-cli创建的项目改造成多页面(vue-cli创建项目从单页面到多页面),今天说一下怎样在多页面的前提下使用history模式. 如何使用history模式 因为vue默认的has ...
- 5分钟搞定iOS抓包Charles,让数据一清二楚
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP ...
- C语言之scanf
#include<stdio.h>int main(){int num;int a,b,c,result,d,result1;scanf("int%d",&nu ...
- 《Android源码设计模式》学习笔记之ImageLoader
微信公众号:CodingAndroid cnblog:http://www.cnblogs.com/angel88/ CSDN:http://blog.csdn.net/xinpengfei521 需 ...
- PHP防止SQL注入和XSS攻击
PHP防止SQL注入和XSS攻击PHP防范SQL注入是一个非常重要的安全手段.一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力.说到网站安全,就不得不提到SQL注入( ...