我们上一期讲到ComBobox绑定数据,https://www.cnblogs.com/guchen33/p/17630808.html

这次我们简单化一下,

正常来讲WPF中绑定不了枚举的像这样

//前台代码
<ComboBox ItemsSource="{Binding MyEnum}"/> //后台VM
public enum MyEnum
{
One,
Two,
Three,
Four,
Five
}

这种会报错

这个时候我们需要用到MarkupExtension类

1、新建一个EnumBindingExtension类,放在Enums文件夹

 public class EnumBindingExtension : MarkupExtension
{
private Type _enumType; public EnumBindingExtension(Type enumType)
{
if (enumType == null || !enumType.IsEnum)
{
throw new ArgumentException("Enum type is required.");
} _enumType = enumType;
} public override object ProvideValue(IServiceProvider serviceProvider)
{
return Enum.GetValues(_enumType);
}
}

MarkupExtension是Xaml的标记扩展

在这段代码中我们自定义EnumBindingExtension然后进行类型转换

然后,前台代码写

<ComboBox ItemsSource="{markup:EnumBinding {x:Type vm: MyEnum}}" Width="200" Height="24"/>

VM代码写

 public enum MyEnum
{
One,
Two,
Three,
Four,
Five
}

运行后可看到

接下来。我们讲讲MarkupExtension的其他用法

首先我们继续自定义类

 public class TextBlockExtension : MarkupExtension
{
// 实现基类中的 ProvideValue 方法 IServiceProvider暂时用不到
public override object ProvideValue(IServiceProvider serviceProvider)
{
return "Hello World!";
}
}

前台直接写

 <TextBlock Text="{markup:TextBlock}" />

可以看到我们的TextBlock Text绑定的值是Hello World!

这种写法对于TextBlock直接写

<TextBlock Text="Hello World!" />

复杂了一部分,但是对于有我们使用其他UIElement能更好的扩展Xaml文件

自定义MarkupExtension的学习,以及WPF中Combobox绑定枚举类型的更多相关文章

  1. WPF中ComboBox绑定数据库自动读取产生数据

    前台端 <ComboBox HorizontalAlignment="Name="cmb_SSBM" DisplayMemberPath="NAME&qu ...

  2. silverlight中 ComboBox绑定数据库,并获取当前选定值

    silverlight中 ComboBox绑定数据库,并获取当前选定值 在silverlight中 用combobox下拉菜单绑定数据库的方法和用DataGrid绑定数据库的方法类似. page.xa ...

  3. 封装:WPF中可以绑定的BindPassWord控件

    原文:封装:WPF中可以绑定的BindPassWord控件 一.目的:本身自带的PassWord不支持绑定 二.Xaml部分 <UserControl x:Class="HeBianG ...

  4. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  5. ComboBox在WPF中的绑定示例:绑定项、集合、转换,及其源代码

    示例1.Selector(基类) 的示例Controls/SelectionControl/SelectorDemo.xaml <Page x:Class="Windows10.Con ...

  6. WPF中ComboBox控件绑定键值对操作

    WPF中下拉框将键值对作为其数据源的具体操作.本实例以枚举类型以及枚举特性描述字符串生成键值对来进行. namespace ViewC { /// <summary> /// View.x ...

  7. WPF中RadioButton绑定数据的正确方法

    RadioButton一般用于单选的时候,也就是从一组值中选择一个值. 比如性别有“男”和“女”两种取值,而对于一个员工的实例来说,性别的取值要么是男,要么是女. 这种时候一般就会用到RadioBut ...

  8. C# 中 datagridview 绑定BindingList类型和更新

    C# 中的datagridview是一个非常有用且强大的控件,可以用来绑定数据库.绑定LIST类型的变量等等. 这里我们说一说绑定List类型并实时更新datagridview的情况.实时更新,指的是 ...

  9. Java中的Enum枚举类型总结

    废话不多说,直接上代码,该例子来源于:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html public enum Planet { ...

  10. [小技巧]C#中如何为枚举类型添加描述方法

    背景 在我们的日常开发中,我们会经常使用枚举类型.有时我们只需要显示枚举的值或者枚举值对应名称, 但是在某些场景下,我们可能需要将枚举值显示为不同的字符串. 例: 当前我们有如下枚举Level pub ...

随机推荐

  1. ABC 304

    T4 在一个平面上有一块面积无限的蛋糕,给出 \(n\) 颗草莓的所在位置和 \(a\,(b)\) 条平行与 \(x\,(y)\) 轴的切刀位置. 切刀会把蛋糕沿 \(x\,(y)\) 轴切开.因此一 ...

  2. Docker 容器逃逸漏洞 (CVE-2020-15257)

    漏洞详情 Docker发布一个容器逃逸漏洞,攻击者利用该漏洞可以实现容器逃逸,提升特权并破坏主机. containerd使用的抽象套接字仅使用UID做验证,即任意UID为0的进程均可访问此API. 当 ...

  3. Ubuntu20.04 PyCharm不能输入中文的解决办法

    在2020.3之后的PyCharm, 无法输入中文, 我使用的是ibus, 据网上搜索结果看, fctix也一样有问题. 在网上查到的, 修改环境变量的方式无效. 实际的原因在于JetBrain使用的 ...

  4. U盘安装win7提示缺少所需的CD/DVD驱动器设备驱动程序

    问题: 最近使用U盘启动盘安装win7,系统弹出提示框: 解决方法: U盘别插在usb3.0的口(蓝色),换成一个usb2.0的口就可以了

  5. acm交互题

    1.Dragon Balls 根据勾股定理把所有整数点都给求解出来,然后依次询问,注意数据范围 暴力求解,把每次可能的值都求出来,然后逐个比较. #include<bits/stdc++.h&g ...

  6. win32 - 将原始音频样本转换为wav文件

    需要先从麦克风中采样,代码样本可以参考官方示例: WASAPI Capture Shared Event Driven 官方示例采样10s, 我们需要在WriteWaveFile函数下添加生成原始音频 ...

  7. Unity学习笔记--数据持久化XML文件(1)

    XML相关 Xml是可拓展标记语言,一种文件格式.我们使用xml来完成对数据持久化的存储.等待我们有一程序运行结束之后,将内存中的数据进行保存,(保存在硬盘/服务器)实现对数据的持久化存储. xml文 ...

  8. django时区相关说明

    # naive time 从字面意思上理解,这是个"幼稚的时间",所以可以理解为它是个本地时间,不带时区信息,不能直接用于存储,如下 import datetime datetim ...

  9. Go语言实现记账本

    使用面向过程思想实现 package main import ( "fmt" ) func main(){ key := "" //设置初始金额 sum := ...

  10. win终端利器-Cmder的安装使用

    cmder 官网:https://cmder.app/ 安装 直接选择full版本下载,完成后解压即可 启动 直接双击Cmder.exe 如果每次都进入到 Cmder 解压目录双击 Cmder.exe ...