zoukankan      html  css  js  c++  java
  • Bind Enum to ListControl

    当使用MVVM时,相信你和我一样经常有这样的需求:

    在ViewModel里定义了一个Enum,它必然是对应UI上的一个ListControl作为不同选项。

    有一种做法是使用Converter,将Enum的Values取出用作Binding。但是当Converter数量增长时,你会想是能少一个Converter就少一个。

    这里会介绍另一种可以省略一个Converter的做法来实现将Enum的Values取出用作Binding。

    How to use:

    Step 1: 添加一个ObjectDataProvider

    <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.

    How to work:

    ObjectDataProvider继承于DatasourceProvider,可以用作ObjectBinding.

    Definitions如下:

    例子里用到的两个property是MethodName和MethodParameters. 将例子中的XAML里的definition其实可以翻译以下:

    Array arr = Enum.GetValues(typeof(MyNamespaceOfEnum:MyEnum));
  • 相关阅读:
    java积累
    mybatis
    Netty
    springcloud相关笔记整理
    java基础总结笔记
    读书笔记-RocketMQ实战与原理解析
    读书笔记-kafka权威指南
    读书笔记-rabbitmq实战指南
    Centos 部署ServiceDesk
    IDEA将新建项目上传至GitLab
  • 原文地址:https://www.cnblogs.com/larson/p/5917312.html
Copyright © 2011-2022 走看看