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));
相关文章
相关标签/搜索