您的位置:首页 > 移动开发 > Objective-C

使用ObjectDataProvider 将函数应用到绑定

2016-12-02 14:34 399 查看
ObjectDataProvider 类用于包装和创建可以用作绑定源的对象。创建一个对象用作于绑定源的方法有多种。比如在代码中创建对象并将其设置为窗口的DataContext,后者在XAML页的资源部分创建对象。

ObjectDataProvider 使你能够在 XAML 中创建可用作绑定源的对象。

ObjectDataProvider 提供ConstructorParameters属性,在创建对象的时候将参数传递给对象的构造函数。

ObjectDataProvider
提供MethodName 属性,获取或设置绑定中要调用的方法的名称。并使用MethodParameters 属性将参数传递给该方法。然后将该方法返回的结果用于参与绑定。

下面举个例子。假设有一个 Person 对象,包含一个字符串类型的属性名为 PersonName 。你可以在XAML资源中定义它:

<Window.Resources>
<src:Person x:Key="myDataSource" PersonName="Joe"/>
</Window.Resources>

然将它绑定到TextBlock 。

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

但是如果需要对一个方法进行绑定而不是属性该如何做呢?

下面的例子中我们调用 Enum.GetValues 函数枚举出DateTimeKind 枚举类型的所有常数,并转换为枚举,然后将返回的结果列表作为ComboBox (或者ListBox) 的数据源进行绑定。

<Window.Resources>
<ObjectDataProvider x:Key="dateTimeKindValues" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="sys:DateTimeKind"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>

假设我们已经定义看 sys 这个命名空间:

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

上面的代码其实就相当于下面的代码:

DateTimeKind[] values = (DateTimeKind[])Enum.GetValues(typeof(DateTimeKind));

现在我们将方法绑定到ComboBox 。

<ComboBox Height="25" Width="150"
ItemsSource="{Binding Source={StaticResource dateTimeKindValues}}"/>
可以看到ComboBox 中的列表中就是DateTimeKind 所有的枚举类型。




参考文章:https://wpf.2000things.com/2012/02/01/485-binding-a-combobox-to-an-enumerated-types-list-of-values/


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息