WPF binding

 典型的Binding具有四个重要组成部分:目标对象binding target object)、目标对象属性target property)、数据源binding source)、Path(用于指明要从数据源中取得的值,就是我们通常写的属性名称) 用控件作为数据源s

看下面一个例子:

要求slider与textbox中内容作相同的变化:

<TextBox Height="23" Margin="10,10,10,0" Name="textBox1" VerticalAlignment="Top" Text="{Binding ElementName=slider1, Path=Value}" />
<Slider Height="21" Margin="10s,40,10,0" Name="slider1" VerticalAlignment="Top" Maximum="100" />

目标对象:TextBox;

目标对象的属性:TextBox的Text属性

数据源:slider1;

Path:数据源slider1的value值

一个CLR 对象作为数据源,将其中一个属性值Binding到某个UIElement的属性上,以自定义的类为例:

在我们项目组日常的工作中,经常需要自己写一个类,并且拿它的实例当作数据源,为类定义一些Property,用来为Binding提供Path

例如:

<TextBox Text=”{Binding Source=userinfo, Path=usernames}” ,

怎样做到类变化时,让textbox也变化s

  让这个类实现INotifyPropertyChanged接口。实现这个接口的目的是当Source的属性值改变后通知Binding(不然人家怎么知道源头的数据变了并进行联动协同呢?),好让Binding把数据传输给Target

例如:

public class Userinfo: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; // 这个接口仅包含一个事件而已
private string usercode;
public string usercode
{
get { return usercode; }
set
{
usercode= value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("usercode")); // 通知Binding是“usercode”这个属性的值改变了
}
}
}
private string name;
public string Name
{
get { return name; }
set
{
name = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name")); // 通知Binding是“Name”这个属性的值改变了
}
}
}
以DataContext作为数据源

DataContext是按照Element Tree向下继承的,并且决定这WPF在运行时能否找到我们所制定的Source对象,当我们有大量的Element需要与一个数据源中的众多属性实现Binding时,我们可以直接在一个公共Parent ElementDataContext上设置这一对象(甚至可以是整个windowpage上),这将会极大的减少我们重复的代码量,同时也会是程序更加可读。

实例:

<WrapPanel Grid.Row="1" Orientation="Horizontal" >

<StackPanel Orientation="Horizontal" Margin="5,2,5,2">

<TextBlock Text="ContactID:" TextAlignment="Center" />

<TextBox Text="{Binding ElementName=listView1, Path=SelectedItem.ContactID}"

MinWidth="100" />

可以改为用DataContext,listView1中被选定的记录listView1.SelectedItem)作为DataContext放在公共Parent Element上,做法如下:

<WrapPanel Grid.Row="1" Orientation="Horizontal" DataContext="{Binding ElementName=listView1, Path=SelectedItem}">

<StackPanel Orientation="Horizontal" Margin="5,2,5,2">

<TextBlock Text="ContactID:" TextAlignment="Center" />

<TextBox Text="{Binding ContactID}" MinWidth="100" />

</StackPanel>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值