博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF之Binding
阅读量:5345 次
发布时间:2019-06-15

本文共 2159 字,大约阅读时间需要 7 分钟。

  • 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,但我们只关心他的价格,声明如下:

public class Car:INotifyPropertyChanged    {        public event PropertyChangedEventHandler PropertyChanged;        private Int32 price;        public Int32 Price        {            get { return price; }            set            {                if (value != price)                {                    price = value;                    if (PropertyChanged != null)                    {                        this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Price"));                    }                }            }        }            }
View Code

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

View Code

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

public partial class MainWindow : Window    {        Car myCar;        public MainWindow()        {            InitializeComponent();            //准备数据源            myCar= new Car();            //准备Binding            Binding binding = new Binding();            binding.Source = myCar;            binding.Path = new PropertyPath("Price");            //使用Binding链接数据源与Binding目标            BindingOperations.SetBinding(this.txtName, TextBox.TextProperty, binding);        }           }
View Code

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

this.txtName.SetBinding(TextBox.TextProperty, new Binding("Price") { Source = myCar = new Car() });
View Code

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

private void Button_Click(object sender, RoutedEventArgs e)        {            myCar.Price = myCar.Price / 10;        }
View Code

 

转载于:https://www.cnblogs.com/yijiaoyingbi/p/4841038.html

你可能感兴趣的文章
mysql导入source注意点
查看>>
linux下编译安装nginx
查看>>
ArcScene 高程不同的表面无法叠加
查看>>
[ONTAK2010] Peaks
查看>>
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>
参数范围的选择
查看>>
使用 MarkDown & DocFX 升级 Rafy 帮助文档
查看>>
THUPC2019/CTS2019/APIO2019游记
查看>>
Nodejs Express模块server.address().address为::
查看>>
4.3.5 Sticks (POJ1011)
查看>>
POJ 2960 S-Nim 博弈论 sg函数
查看>>
Dijkstra模版
查看>>
一个简单的插件式后台任务管理程序
查看>>
GDB调试多进程程序
查看>>
组合数
查看>>
CMD批处理延时启动的几个方法
查看>>
转:LoadRunner中web_custom_request 和 web_submit_data的差别
查看>>