更新时间:2022-08-15 11:45:05
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);