WPF之Binding

摘要:
一般情况下,Binding源是逻辑层的对象,Binging的目标是UI层的控件对象。Binding如何传递数据变化前面说过数据源是一个对象,但一个对象身上可能有很多数据,这些数据又通过属性暴露给外界。其中你想通过Binding送到UI元素的数据,或者说UI元素关心的那个属性被称为Binding的路径。Binding是一种自动机制,当属性值发生变化后,属性要有能力通知Binding,让Binding把变化传递给UI元素。因此数据源要继承接口INotifyPropertyChanged,当为Binding设定了数据源后,Binding会自动侦听来自这个接口的PropertyChanged事件。
  • Bingding是什么

WPF中的Binding注重表达的是一种像桥梁一样的关系,它的两端分别是Binding的源(Source)和目标(Target)。数据从哪里来哪里就是源,Binding是架在中间的桥梁,Binding的目标是数据要往哪去儿。一般情况下,Binding源是逻辑层的对象,Binging的目标是UI层的控件对象。

  • Binding如何传递数据变化

前面说过数据源是一个对象,但一个对象身上可能有很多数据,这些数据又通过属性暴露给外界。其中你想通过Binding送到UI元素的数据,或者说UI元素关心的那个属性被称为Binding的路径(Path)。

Binding是一种自动机制,当属性值发生变化后,属性要有能力通知Binding,让Binding把变化传递给UI元素。这种能力的实现就是通过在属性的set语句中触发一个PropertyChanged事件。因此数据源要继承接口INotifyPropertyChanged,当为Binding设定了数据源后,Binding会自动侦听来自这个接口的PropertyChanged事件。

现在我们抽象一个类Car,但我们只关心他的价格,声明如下:

WPF之Binding第1张WPF之Binding第2张
public classCar:INotifyPropertyChanged
    {
        public eventPropertyChangedEventHandler PropertyChanged;
        privateInt32 price;

        publicInt32 Price
        {
            get { returnprice; }
            set{
                if (value !=price)
                {
                    price =value;
                    if (PropertyChanged != null)
                    {
                        this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Price"));
                    }
                }
            }
        }        
    }
View Code

然后我们在窗体上创建一个TextBox和Button。TextBox显示Car的Price,将作为Binding的目标,窗体代码如下:

WPF之Binding第3张WPF之Binding第4张
<Window x:Class="WpfApplication1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Simple Binding"Height="150"Width="300">
    <StackPanel>
        <TextBox x:Name="txtName"TextWrapping="Wrap"Text="TextBox"Margin="5"Height="27"/>
        <Button Content="降价10%"Click="Button_Click"Margin="5"Height="31"/>
    </StackPanel>
</Window>
View Code

接下来我们在窗体的构造函数里使用Binding把数据源和UI元素链接起来,代码如下:

WPF之Binding第5张WPF之Binding第6张
public partial classMainWindow : Window
    {
        Car myCar;
        publicMainWindow()
        {
            InitializeComponent();
            //准备数据源
            myCar= newCar();
            //准备Binding
            Binding binding = newBinding();
            binding.Source =myCar;
            binding.Path = new PropertyPath("Price");
            //使用Binding链接数据源与Binding目标
            BindingOperations.SetBinding(this.txtName, TextBox.TextProperty, binding);
        }       
    }
View Code

根据Binding类的构造函数以及C#的对象初始化器语法来简化代码,代码如下:

WPF之Binding第7张WPF之Binding第8张
this.txtName.SetBinding(TextBox.TextProperty, new Binding("Price") { Source = myCar = new Car() });
View Code

在Button的Click事件中改变属性Price的值,每点一次,Car的Price减少10%,代码如下:

WPF之Binding第9张WPF之Binding第10张
private void Button_Click(objectsender, RoutedEventArgs e)
        {
            myCar.Price = myCar.Price / 10;
        }
View Code

免责声明:文章转载自《WPF之Binding》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mac OS 的终端工具 iTerm2 的使用及设置three.js中简单粗暴实现渐变色背景下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF-带有GridView的ListView样式

ListView是展示数据的常用控件,这里简单对带有GridView的ListView样式进行设置。 <Style TargetType="{x:Type ListViewItem}"> <Style.Triggers> <Trigger Property="IsSel...

WPF ListView / ListBox 更新绑定数据源时,自动刷新界面显示

问题现象:ListView 更新绑定数据源时,界面不能自动刷新。 原因及解决方案: 1、ListView 的 ItemSource 使用 BindingList < T >; 注:由于 List < T > 没有实现 INotifyPropertyChanged 接口, 因此若使用 List < T > 作为 ItemS...

wpf 制作播放视频的屏保程序、而且能分屏显示

     这个程序用到了WPF里  “visual_Brush”(主要是为了实现分屏显示) , “UserControl” ,这两个知识点;   在屏保状态下播放指定文件夹下的视频,而且能分屏显示;   把编译好的屏保程序(原本是.exe)改名为.SCR 放到C:WindosSystem32下    现在就可以设置为屏保了:譬如win7系统的 在桌面属性→...

WPF 快捷键(窗体)

前言:在WPF项目开发当中,遇到了需要用到快捷键的需求,于是对热键做了一个快速学习,但是这方面的资源很少。。。 热键大致分为三种场景,下面用QQ的使用场景举例: 全局热键:QQ的Ctrl+Alt+A截图。 焦点热键:QQ消息栏的Shift+Enter文本换行。 窗体热键:Alt+F4关闭QQ的窗口。 在WPF当中,全局热键 和 焦点热键都可以轻松实现,下...

WPF DataGrid 绑定DataSet数据 自动生成行号

1、绑定数据:dataGrid1.ItemsSource = dataSet.Tables[0].DefaultView; 注意:在创建DataGrid 时可以通过AutoGenerateColumns 属性设置列是否自动生成,从而加入自定义列。如果DataGrid 中同时包含“自动生成列”与“用户自定义列”,则首先创建“用户自定义列”。DataGrid...

WPF从入门到放弃系列第二章 XAML

本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳。 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn/library/ms752059.aspx XAML 语法详述:https://msdn.microsoft.com/zh-cn/library/ms7...