• 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));
  • 相关阅读:
    SQL查询
    SQL总结(二)连表查询
    SQL总结(一)基本查询
    SQL游标、函数的使用方法
    理解 Virtual DOM(摘)及评价
    virtual DOM的作用:将DOM的维护工作由系统维护转交给virtual DOM维护
    DOM的回流和重绘(重排、重绘)
    并发编程的核心
    执行流(指令流)的控制层级
    go语言的工资好高
  • 原文地址:https://www.cnblogs.com/larson/p/5917312.html
Copyright © 2020-2023  润新知