无废话WPF系列8:绑定Binding及模式

简介:

绑定,就是把一个对象属性的值绑定在别的对象的属性上

1. 默认绑定

public class Company 

    public string Name { get; set; } 

 

XAML代码

1
2
3
4
5
<StackPanel x:Name= "stackPanel" >
     <TextBox x:Name= "txtName"  Text= "{Binding Path=Name}" ></TextBox>
     <TextBox x:Name= "txtName2"  Text= "{Binding  Path=Name}" ></TextBox>
     <Button Click= "Button_Click" >Ok</Button>
</StackPanel>
后端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace  DeepXAML
{
     public  partial  class  MainWindow : Window
     {
         Company mCompany;
         public  MainWindow()
         {
             InitializeComponent();
             mCompany = new  Company { Name = "Microsoft"  };
             this .stackPanel.DataContext = mCompany;
         }
         private  void  Button_Click( object  sender, RoutedEventArgs e)
         {           
             MessageBox.Show( this .mCompany.Name);
             mCompany.Name = "Sun" ;
         }       
     }
}

image 
我们把第一个文本框的值改为IBM,并点击按钮

 image

这个结果说明,我们绑定到一个普通的UI上时,前端的(绑定的目标)改变会时绑定的源改变。但我们第二次点击按钮时,出现如下的图

image

2. 双向绑定

上图后台使用代码改变对象的属性值,但前端绑定的值并未改变。那么如何让后台属性的变化通知到绑定的UI控件,让UI控件更新值呢?我们需要实现一个接口,现在我们对Company做如下改造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace  DeepXAML
{
    public   class  Company:INotifyPropertyChanged
     {
         private  string  name;
         public  event  PropertyChangedEventHandler PropertyChanged;
         public  string  Name
         {
             get  { return  name; }
             set  {
                 name = value;
                 if  ( this .PropertyChanged != null )
                 {
                     this .PropertyChanged.Invoke( this , new  PropertyChangedEventArgs( "Name" ));
                 }
             }
         }
    }
}

 

现在我们看一下我们点击按钮的结果,此时UI的值已经自动更新为后台更改的对象的值Sun了。

image

 

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.

image

oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标。

OneTime: 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。

OneWayToSource: 绑定会将数据从目标发送到源。

TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。

Default: binding的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay.

上面的例子不设Mode时,默认的就是Default.

 

4.如何用代码设定Binding

<StackPanel x:Name="stackPanel"> 
       <TextBox x:Name="txtName"></TextBox> 

</StackPanel>

image

 

5. 没有Path的Binding

imageimage

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2011/02/19/1958583.html如需转载请自行联系原作者


王德水

相关文章
WPF—多重绑定和跨层级绑定
WPF—多重绑定和跨层级绑定
|
存储 自然语言处理 C#
WPF技术之Binding
WPF(Windows Presentation Foundation)是微软推出的一种用于创建应用程序用户界面的框架。Binding(绑定)是WPF中的一个重要概念,它用于在界面元素和数据源之间建立关联。通过Binding,可以将界面元素(如文本框、标签、列表等)与数据源(如对象、集合、属性等)进行绑定,从而实现数据的双向传递和同步更新。
633 2
WPF技术之Binding
|
前端开发 C# 开发者
WPF开发者必读:MVVM模式实战,轻松构建可维护的应用程序,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离关注点,提高了代码的可维护性和可扩展性。本文详细介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定与逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种模式,开发者可以更高效地构建桌面应用程序。希望本文能帮助你在WPF开发中更好地应用MVVM模式。
761 1
|
设计模式 前端开发 C#
WPF 项目中 MVVM模式 的简单例子说明
本文通过WPF项目中的加法操作示例,讲解了MVVM模式的结构和实现方法,包括数据模型、视图、视图模型的创建和数据绑定,以及命令的实现和事件通知机制。
|
C# 微服务 Windows
模块化革命:揭秘WPF与微服务架构的完美融合——从单一职责原则到事件聚合器模式,构建高度解耦与可扩展的应用程序
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中借鉴微服务架构思想,实现模块化设计。通过将WPF应用分解为独立的功能模块,并利用事件聚合器实现模块间解耦通信,可以有效提升开发效率和系统可维护性。文中还提供了具体示例代码,展示了如何使用事件聚合器进行模块间通信,以及如何利用依赖注入进一步提高模块解耦程度。此方法不仅有助于简化复杂度,还能使应用更加灵活易扩展。
324 0
|
前端开发 开发者 C#
WPF开发者必读:MVVM模式实战,轻松实现现代桌面应用架构,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离应用程序的逻辑和界面,提高了代码的可维护性和可扩展性。本文介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定和逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种方式,开发者可以构建更加高效和可扩展的桌面应用程序。
700 0
WPF/C#:程序关闭的三种模式
WPF/C#:程序关闭的三种模式
245 3
WPF/C#:程序关闭的三种模式
WPF/C#:程序关闭的三种模式
253 0
|
设计模式 前端开发 C#
WPF/C#:理解与实现WPF中的MVVM模式
WPF/C#:理解与实现WPF中的MVVM模式
1139 0
WPF-Binding问题-模板样式使用Binding TemplatedParent与TemplateBinding区别
WPF-Binding问题-模板样式使用Binding TemplatedParent与TemplateBinding区别
461 0