标签:
绑定,就是把一个对象属性的值绑定在别的对象的属性上
1. 默认绑定
public class Company 
{ 
    public string Name { get; set; } 
} 
 
XAML代码
 
1 | 
<StackPanel x:Name="stackPanel">  | 
 
2 | 
    <TextBox x:Name="txtName" Text="{Binding Path=Name}"></TextBox>  | 
 
3 | 
    <TextBox x:Name="txtName2" Text="{Binding  Path=Name}"></TextBox>  | 
 
4 | 
    <Button Click="Button_Click">Ok</Button>  | 
 
 
 
后端代码:
 
03 | 
    public partial class MainWindow : Window  | 
 
08 | 
            InitializeComponent();  | 
 
09 | 
            mCompany = new Company { Name = "Microsoft" };  | 
 
10 | 
            this.stackPanel.DataContext = mCompany;  | 
 
12 | 
        private void Button_Click(object sender, RoutedEventArgs e)  | 
 
14 | 
            MessageBox.Show(this.mCompany.Name);  | 
 
15 | 
            mCompany.Name = "Sun";  | 
 
 
 
 
我们把第一个文本框的值改为IBM,并点击按钮
 
这个结果说明,我们绑定到一个普通的UI上时,前端的(绑定的目标)改变会时绑定的源改变。但我们第二次点击按钮时,出现如下的图

2. 双向绑定
上图后台使用代码改变对象的属性值,但前端绑定的值并未改变。那么如何让后台属性的变化通知到绑定的UI控件,让UI控件更新值呢?我们需要实现一个接口,现在我们对Company做如下改造
 
03 | 
   public  class Company:INotifyPropertyChanged  | 
 
06 | 
        public event PropertyChangedEventHandler PropertyChanged;  | 
 
12 | 
                if (this.PropertyChanged != null)  | 
 
14 | 
                    this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));  | 
 
 
 
 
现在我们看一下我们点击按钮的结果,此时UI的值已经自动更新为后台更改的对象的值Sun了。

 
3.Binding的方向
<TextBox x:Name="txtName" Text="{Binding Path=Name, Mode=TwoWay}"></TextBox> 
<TextBox x:Name="txtName2" Text="{Binding  Path=Name, Mode=OneWay}"></TextBox>
这个在Binding时可以设置Mode.

oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标。
OneTime: 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。
OneWayToSource: 绑定会将数据从目标发送到源。
TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。
Default: binding的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay.
上面的例子不设Mode时,默认的就是Default.
 
4.如何用代码设定Binding
<StackPanel x:Name="stackPanel"> 
       <TextBox x:Name="txtName"></TextBox> 
</StackPanel>

 
5. 没有Path的Binding


WPF绑定Binding及模式
标签:
原文地址:http://www.cnblogs.com/zzw1986/p/4688422.html