当使用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));

Bind Enum to ListControl的更多相关文章

  1. Bind Enum to Combobox.SelectedIndex

    原文:Bind Enum to Combobox.SelectedIndex Do you mean that you want to bind a variable (not a property) ...

  2. Bind Enum To DropDownList ?

    0. 准备测试数据 0.1 : 枚举 using System; using System.Collections.Generic; using System.Linq; using System.W ...

  3. Java基础(五)-Java序列化与反序列化

    .output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

  4. ASP.NET MVC 表格操作

    Beginners Guide for Creating GridView in ASP.NET MVC 5 http://www.codeproject.com/Articles/1114208/B ...

  5. Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件

    在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <su ...

  6. MFC listcontrol 分列 添加行数据 点击列头排序

    适用于 对话框程序 1.在工具箱中拖出 ListControl,然后右键-属性,view-Report 让你的ListControl变成这幅模样! 2.添加ListControl控件的control类 ...

  7. MFC ListControl使用方法

    在原来博客中有:MF CListControl 简单功能使用 推荐文章:MFC类CtrlList用法 今天又又一次来介绍点新东西:双击击listcontrol  做出响应.当然你能够做的还有非常多,比 ...

  8. Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用

    原文:Eval().XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用 “/vs2005”应用程序中的服务器错误.--------------------------- ...

  9. 山寨一个std::bind\boost::bind

    这里是最初始的版本,参考https://github.com/cplusplus-study/fork_stl/blob/master/include/bind.hpp 提供了最简洁的实现方式. 第一 ...

随机推荐

  1. 文件和目录之stat、fstat和lstat函数

    #include <sys/stat.h> int stat( const char *restrict pathname, struct stat *restrict buf ); in ...

  2. 文件和目录之symlink和readlink函数

    symlink函数创建一个符号链接. #include <unistd.h> int symlink( const char *actualpath, const char *sympat ...

  3. Jordan Lecture Note-7: Soft Margin SVM

    Soft Margin SVM  (1)Recall 之前分析到SVM的模型为: \begin{align}\mathop{\min}&\quad \frac{1}{2}w^\prime w\ ...

  4. windows7怎么共享文件夹

    http://jingyan.baidu.com/article/d45ad148f06fef69552b80e6.html

  5. ASP.NET 相同页面前后端之间传值

    aspx页面前后端之间传值:前端的html或js获得后端的cs,后端的cs获得前端的js值. 一.前端获得后端的值 1.html元素 前端: <td><%=str%></ ...

  6. linux系统安装对硬件有什么要求

    Linux系统对你的硬件要求不是很高,你可以参照你的系统上面的参数进行对照,Linux系统的初衷就是以最低的配置完成最高的性能,随意,现在的计算机都可以安装这个系统的,你不要顾虑多了,但是分区你不用系 ...

  7. (原创)鸟哥linux学习script shell相关笔记

    在使用鸟哥linux进行script shell学习的过程中碰到一些不太明白的知识点,在这里进行一些记录 1. [root@www scripts]# vi sh03.sh #!/bin/bash # ...

  8. Android开发之闹钟

    闹钟开发: 1.需要时间选择器TimePicker 2.需要Calendar类对日期时间进行操作 3.需要AlarmManager//闹钟管理实质是一个全局定时器, 是Android中常用的一种系统级 ...

  9. spring中加入log4j

    spring中加入log4j <context-param> <param-name>log4jConfigLocation</param-name> <pa ...

  10. SAX方式解析XML文件实例

    books.XML文件: 书籍book.java实体类: public class Book { private String id; private String name; private Str ...