Bind Enum to ListControl

當使用MVVM時,相信你和我同樣常常有這樣的需求:ide

在ViewModel裏定義了一個Enum,它必然是對應UI上的一個ListControl做爲不一樣選項。spa

有一種作法是使用Converter,將Enum的Values取出用做Binding。可是當Converter數量增加時,你會想是能少一個Converter就少一個。翻譯

這裏會介紹另外一種能夠省略一個Converter的作法來實現將Enum的Values取出用做Binding。code

How to use:

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

How to work:

ObjectDataProvider繼承於DatasourceProvider,能夠用做ObjectBinding.io

Definitions以下:class

例子裏用到的兩個property是MethodName和MethodParameters. 將例子中的XAML裏的definition其實能夠翻譯如下:List

 

Array arr = Enum.GetValues(typeof(MyNamespaceOfEnum:MyEnum));
相關文章
相關標籤/搜索