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/