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,
{
return this.Add(x, y).ToString();
}
else
{
return "Input Error!";
}
}
}
}
接下來是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綁定方法