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

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

举例

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

 

[csharp] view plain copy
 
  1. public string Add(string arg1, string arg2)  
  2. {  
  3.     double x = 0;  
  4.     double y = 0;  
  5.     double z = 0;  
  6.     if (double.TryParse(arg1, out x) && double.TryParse(arg2, out y))  
  7.     {  
  8.         z = x + y;  
  9.         return z.ToString();  
  10.     }  
  11.     return "Error";  
  12. }  


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

 

 

[html] view plain copy
 
  1. <TextBox x:Name="textBoxArg1" Margin="5" />  
  2. <TextBox x:Name="textBoxArg2" Margin="5" />  
  3. <TextBox x:Name="textBoxResult" Margin="5" />  


后台代码:

 

 

[csharp] view plain copy
 
  1. ObjectDataProvider odp = new ObjectDataProvider();  
  2. odp.ObjectInstance = new Calculator();  
  3. odp.MethodName = "Add";  
  4. odp.MethodParameters.Add("0");  
  5. odp.MethodParameters.Add("0");  
  6.   
  7. Binding bindingToArg1 = new Binding();  
  8. bindingToArg1.Source = odp;  
  9. bindingToArg1.Path = new PropertyPath("MethodParameters[0]");  
  10. bindingToArg1.BindsDirectlyToSource = true;  
  11. bindingToArg1.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;  
  12.   
  13. Binding bindingToArg2 = new Binding();  
  14. bindingToArg2.Source = odp;  
  15. bindingToArg2.Path = new PropertyPath("MethodParameters[1]");  
  16. bindingToArg2.BindsDirectlyToSource = true;  
  17. bindingToArg2.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;  
  18.   
  19. Binding bindingToResult = new Binding();  
  20. bindingToResult.Source = odp;  
  21. bindingToResult.Path = new PropertyPath(".");  
  22.   
  23. textBoxArg1.SetBinding(TextBox.TextProperty, bindingToArg1);  
  24. textBoxArg2.SetBinding(TextBox.TextProperty, bindingToArg2);  
  25. textBoxResult.SetBinding(TextBox.TextProperty, bindingToResult);  


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

 

 

posted on 2017-07-26 09:14  alex5211314  阅读(98)  评论(0编辑  收藏  举报

导航