Binding 之ObjectDataProvider数据源

ObjectDataProvider数据源它可以把对象作为数据源提供给Binding,可用于绑定函数,

实例如下

 

 1 public partial class BindObiectDataProvider : Window
 2     {
 3         public BindObiectDataProvider()
 4         {
 5             InitializeComponent();
 6             SetBinding();
 7         }
 8         private void Button_Click(object sender, RoutedEventArgs e)
 9         {
10             ObjectDataProvider odp = new ObjectDataProvider();
11             odp.MethodName = "add";
12             odp.ObjectInstance = new Calculator();
13             odp.MethodParameters.Add("100");
14             odp.MethodParameters.Add("200");
15             MessageBox.Show(odp.Data.ToString());
16 
17         }
18         private void SetBinding()
19         {
20             ObjectDataProvider odp = new ObjectDataProvider();//此类是把对象作为数据源提供给Binding
21             odp.ObjectInstance = new Calculator();
22             odp.MethodName = "add";//指定将要调用Calculator对象总的add方法
23             odp.MethodParameters.Add("0");//相当于告诉odp去调用含有二个参数的add可以用于区分重载,
24             odp.MethodParameters.Add("0");//类型敏感的因add参数为字符串,古此处也应字符串
25             Binding bindingToArg1 = new Binding("MethodParameters[0]")//参数为绑定的路径
26             {
27                 Source = odp,
28                 BindsDirectlyToSource = true,//告诉Binding对象只负责把从UI得到的数据写入Source(odp)而不是写入odp对象包装的Calculator对象中
29                 UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged//枚举值,用于指定更新立即将值回传到Source
30             };
31             Binding bindingToArg2 = new Binding("MethodParameters[1]")
32             {
33                 Source = odp,
34                 BindsDirectlyToSource = true,
35                 UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
36             };
37             Binding bindResulate = new Binding(".") { Source = odp };
38             this.textBoxArg1.SetBinding(TextBox.TextProperty, bindingToArg1);
39             this.textBoxArg2.SetBinding(TextBox.TextProperty, bindingToArg2);
40             this.textBoxResult.SetBinding(TextBox.TextProperty, bindResulate);
41         }
42     }

 

 <StackPanel>
        <Button Content="绑定非暴露的属性(此处为返回值)" Click="Button_Click"></Button>
        <TextBox Margin="10" x:Name="textBoxArg1"></TextBox>
        <TextBox Margin="10" x:Name="textBoxArg2"></TextBox>
        <TextBox Margin="10" x:Name="textBoxResult"></TextBox>
    </StackPanel>
public  class Calculator
    {
      public string add(string str1,string str2)
      {
          double x = 0;
          double y = 0;
          double z = 0;
          if(double.TryParse(str1,out x)&&double.TryParse(str2,out y))
          {
              z = x + y;
              return z.ToString();
          }
          return "Input Error";
      }
    }

 

 

 

posted @ 2016-03-25 17:55  名扬博客  阅读(364)  评论(0编辑  收藏  举报