数据绑定(七)使用ObjectDataProvider对象作为Binding的Source

简介: 原文:数据绑定(七)使用ObjectDataProvider对象作为Binding的Source ObjectDataProvider就是把对象作为数据源提供给Binding,类似的还有XmlDataProvider...
原文: 数据绑定(七)使用ObjectDataProvider对象作为Binding的Source

ObjectDataProvider就是把对象作为数据源提供给Binding,类似的还有XmlDataProvider,也就是把XML数据作为数据源提供给Binding,这两个类的父类都是DataSourceProvider抽象类

举例

有一个Calculator类,提供了一个Add方法

        public string Add(string arg1, string arg2)
        {
            double x = 0;
            double y = 0;
            double z = 0;
            if (double.TryParse(arg1, out x) && double.TryParse(arg2, out y))
            {
                z = x + y;
                return z.ToString();
            }
            return "Error";
        }

界面代码很简单,有三个输入框

        <TextBox x:Name="textBoxArg1" Margin="5" />
        <TextBox x:Name="textBoxArg2" Margin="5" />
        <TextBox x:Name="textBoxResult" Margin="5" />

后台代码:

            ObjectDataProvider odp = new ObjectDataProvider();
            odp.ObjectInstance = new Calculator();
            odp.MethodName = "Add";
            odp.MethodParameters.Add("0");
            odp.MethodParameters.Add("0");

            Binding bindingToArg1 = new Binding();
            bindingToArg1.Source = odp;
            bindingToArg1.Path = new PropertyPath("MethodParameters[0]");
            bindingToArg1.BindsDirectlyToSource = true;
            bindingToArg1.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

            Binding bindingToArg2 = new Binding();
            bindingToArg2.Source = odp;
            bindingToArg2.Path = new PropertyPath("MethodParameters[1]");
            bindingToArg2.BindsDirectlyToSource = true;
            bindingToArg2.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

            Binding bindingToResult = new Binding();
            bindingToResult.Source = odp;
            bindingToResult.Path = new PropertyPath(".");

            textBoxArg1.SetBinding(TextBox.TextProperty, bindingToArg1);
            textBoxArg2.SetBinding(TextBox.TextProperty, bindingToArg2);
            textBoxResult.SetBinding(TextBox.TextProperty, bindingToResult);

首先定义了一个 ObjectDataProvider对象并与Calculator类的Add方法进行关联,把第一个输入框中的内容同函数的参数1进行绑定,第二个输入框中的内容同函数的参数2进行绑定,函数的返回值与第三个输入框绑定,BindsDirectlyToSource = true这句代码的意思是,Binding对象只负责把从UI元素收集到的数据写入其直接Source(即ObjectDataProvider对象)而不是被ObjectDataProvider对象包装着的Calculator对象,


目录
相关文章
|
3月前
|
存储 JSON JavaScript
组件的创建,引用,样式隔离以及methods,data,properties和数据事件监听
详细介绍了微信小程序中组件的创建、引用(包括局部引用和全局引用)、样式隔离、组件的data、methods和properties,以及组件的数据监听器的使用方法和场景。
组件的创建,引用,样式隔离以及methods,data,properties和数据事件监听
|
前端开发 JavaScript 开发者
为 class 创建的组件传递 props 参数并直接使用 this.props 来访问|学习笔记
快速学习为 class 创建的组件传递 props 参数并直接使用 this.props 来访问
162 0
为 class 创建的组件传递 props 参数并直接使用  this.props 来访问|学习笔记
|
JavaScript 前端开发
为class创建的组件传递props参数并直接使用this.props来访问
为class创建的组件传递props参数并直接使用this.props来访问
为class创建的组件传递props参数并直接使用this.props来访问
|
C#
WPF QuickStart系列之数据绑定(Data Binding)
原文:WPF QuickStart系列之数据绑定(Data Binding) 这篇博客将展示WPF DataBinding的内容。 首先看一下WPF Data Binding的概览, Binding Source可以是任意的CLR对象,或者XML文件等,Binding Target需要有依赖属性。
1250 0
艾伟:[WCF的Binding模型]之五:绑定元素(Binding Element)
在上面的内容中,先后介绍了信道、信道管理器、信道监听器和信道工厂。从对象的创建来讲,信道管理器是信道的创建者。说的再具体点,客户端的信道通过信道工厂创建,服务端的信道通过信道监听器创建。但是信道工厂和信道监听器又是如果被创建出来的呢? 我们在一开始就已经说过,作为终结点三要素的绑定对象实现了所有的通信细节,并且通过创建信道栈实现了消息的传递。
771 0
|
IDE 开发工具 Android开发
Android开发教程 - 使用Data Binding(五)数据绑定
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fragment中的使用 ...
1067 0
|
容器 C#
数据绑定(四)使用DataContext作为Binding的Source
原文:数据绑定(四)使用DataContext作为Binding的Source DataContext属性被定义在FrameworkElement类里,这个类是WPF控件的基类,这意味着所有WPF控件都具备这个属性,...
1100 0
|
XML 数据格式 .NET
数据绑定(六)使用XML数据作为Binding的Source
原文:数据绑定(六)使用XML数据作为Binding的Source .NET Framework提供了两套处理XML数据的类库 1.
908 0
|
.NET 容器 开发框架
数据绑定(三)为Binding指定绑定源的几种方法
原文:数据绑定(三)为Binding指定绑定源的几种方法 Binding的源是数据的来源,所以,只要一个对象包含数据并能通过属性把数据暴露出来,它就能当作Binding的源来使用,常用的办法有: 一。
1040 0
|
容器
数据绑定(八)使用Binding的RelativeSource
原文:数据绑定(八)使用Binding的RelativeSource 当一个Binding有明确的数据来源时可以通过为Source或ElementName赋值的办法让Binding与之关联,有的时候由于不能确定Source的对象叫什么名字,但知道它与作为Binding目标的对象在UI布局上有相对关系,比如控件自己关联自己的某个数据、关联自己某级容器的数据,就要使用Binding的RelativeSource属性。
788 0