1. 程式人生 > >WPF中使用ObjectDataProvider綁定方法

WPF中使用ObjectDataProvider綁定方法

才會 添加 焦點 err 接下來 space ros ret ati

原文:WPF中使用ObjectDataProvider綁定方法

ObjectDataProvider提供了綁定任意.net類型的功能,具體功能如下:
1.ObjectDataProvider提供了綁定任意CLR類型的公嫩那個。
2.它可以再XAML中利用生命史的語言以及參數化的構造函數完成對數據的創建
3.增加對成員函數的綁定
4.提供了更多的異步綁定的功能

下面用一個加法計算器來進行實例說明:
請先看我們的加法類: C#代碼

  namespace BindingDemo

  {

   public class Calculator

   {

   public double Add(double one,double two)

   {

   return one + two;

   }

  

   public string Add(string arg1, string arg2)

   {

   int x = 0;

   int y = 0;

   if (int.TryParse(arg1,

out x) && int.TryParse(arg2, out y))

   {

      return this.Add(x, y).ToString();

   }

     else

   {

   return "Input Error!";

   }

   }

   }

  }


接下來是XAML文件的定義:

Xaml代碼

  <Window x:Class="BindingDemo.Window1"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   xmlns:local="clr-namespace:BindingDemo"

   xmlns:system="clr-namespace:System;assembly=mscorlib"

   Title="Add" Height="300" Width="300">

  

   <Window.Resources>

   <ObjectDataProvider x:Key="odp" ObjectType="{x:Type local:Calculator}" MethodName="Add">

   <ObjectDataProvider.MethodParameters>

   <system:String>0</system:String>

   <system:String>0</system:String>

   </ObjectDataProvider.MethodParameters>

   </ObjectDataProvider>

   </Window.Resources>

   <StackPanel>

   <TextBox x:Name="textBox1" Margin="5" Text="{Binding Source={StaticResource odp}, Path=MethodParameters[0], BindsDirectlyToSource=true, UpdateSourceTrigger=PropertyChanged}" />

   <TextBox x:Name="textBox2" Margin="5" Text="{Binding Source={StaticResource odp}, Path=MethodParameters[1], BindsDirectlyToSource=true, UpdateSourceTrigger=PropertyChanged}"/>

   <TextBox x:Name="textBox3" Margin="5" Text="{Binding Source={StaticResource odp}, Mode=OneWay}"/>

   </StackPanel>

  </Window>

<Window x:Class="BindingDemo.Window1"    
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="clr-namespace:BindingDemo"   
     xmlns:system="clr-namespace:System;assembly=mscorlib"     
    Title="Add" Height="300" Width="300">    
<Window.Resources>        
  <ObjectDataProvider x:Key="odp" ObjectType="{x:Type local:Calculator}" MethodName="Add">           
    <ObjectDataProvider.MethodParameters>                
      <system:String>0</system:String>                
      <system:String>0</system:String>            
    </ObjectDataProvider.MethodParameters>        
  </ObjectDataProvider>   
</Window.Resources>    
  <StackPanel>        
    <TextBox x:Name="textBox1" Margin="5" Text="{Binding Source={StaticResource odp}, Path=MethodParameters[0], BindsDirectlyToSource=true, UpdateSourceTrigger=PropertyChanged}" />        
    <TextBox x:Name="textBox2" Margin="5" Text="{Binding Source={StaticResource odp}, Path=MethodParameters[1], BindsDirectlyToSource=true, UpdateSourceTrigger=PropertyChanged}"/>        
    <TextBox x:Name="textBox3" Margin="5" Text="{Binding Source={StaticResource odp}, Mode=OneWay}"/>    
  </StackPanel>
</Window>



說明:1.xaml文件中對於命名空間的定義:
xmlns:local="clr-namespace:BindingDemo"
xmlns:system="clr-namespace:System;assembly=mscorlib"
我們應該知道在xaml文件中其實並沒有引入.net常規類庫中命名空間,如System、System.Data等,如果我們需要在xaml文件中使用,則需要將對應的命名空間添加到xaml中

2.<TextBox x:Name="textBox1" Margin="5" Text="{Binding Source={StaticResource odp}, Path=MethodParameters[0], BindsDirectlyToSource=true, UpdateSourceTrigger=PropertyChanged}" />
這裏需要補充說明的是UpdateSourceTrigger屬性,它綁定了數據更新的規則。UpdateSourceTrigger有一下四種取值:
Default-------它是UpdateSourceTrigger的默認取值。當UpdateSourceTrigger屬性被設置為改枚舉值的時候,對數據的更新則會根據根據參與綁定的屬性進行相應的更改。

PropertyChanged----只要數據源中有意思的更改,數據綁定機制將自動那個刷新目標數據的值。

LostFocus----當綁定的目標失去輸入焦點的時候,數據綁定機制將自動刷新目標數據的值。

Explicit------只有再調用BindingExpression的UpdateSource函數的情況下,目標數據的值才會被刷新。

WPF中使用ObjectDataProvider綁定方法