當使用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));