当使用MVVM时,相信你和我同样常常有这样的需求:ide
在ViewModel里定义了一个Enum,它必然是对应UI上的一个ListControl做为不一样选项。spa
有一种作法是使用Converter,将Enum的Values取出用做Binding。可是当Converter数量增加时,你会想是能少一个Converter就少一个。翻译
这里会介绍另外一种能够省略一个Converter的作法来实现将Enum的Values取出用做Binding。code
Step 1: 添加一个ObjectDataProviderblog
<UserControl> <UserControl.Resources> <ObjectDataProvider x:Key="MyEnumNameList" MethodName="GetValues" ObjectType="{x:Type system:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="MyNamespaceOfEnum:MyEnum"/> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </UserControl.Resources> </UserControl>
Step 2: 使用新添加的ObjectDataProvider去作binding继承
<Combobox ItemsSource={StaticResource MyEnumNameList}/>
Step 3: 须要取回选中的enum值时,直接使用SelectedItem就是对应的enum value.it
ObjectDataProvider继承于DatasourceProvider,能够用做ObjectBinding.io
Definitions以下:class
例子里用到的两个property是MethodName和MethodParameters. 将例子中的XAML里的definition其实能够翻译如下:List
Array arr = Enum.GetValues(typeof(MyNamespaceOfEnum:MyEnum));