且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-08-15 11:45:05

原文:数据绑定(七)使用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对象,