使用ObjectDataProvider 将函数应用到绑定

本文介绍了如何使用WPF中的ObjectDataProvider来创建绑定源,并通过具体的示例展示了如何使用该类来调用方法并将其结果用于绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值