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));
  • 相关阅读:
    using 关键字在 C++ 中的几种用法
    Chromium 修改图片资源
    SAM&广义SAM
    Burnside和Polya
    笔记:杜教筛
    笔记:莫比乌斯反演
    Miller-Rabin
    点分治
    虚树
    计算几何
  • 原文地址:https://www.cnblogs.com/larson/p/5917312.html
Copyright © 2011-2022 走看看