首页 > 其他分享 >自定义MarkupExtension的学习,以及WPF中Combobox绑定枚举类型

自定义MarkupExtension的学习,以及WPF中Combobox绑定枚举类型

时间:2023-08-16 10:15:20浏览次数:40  
标签:自定义 Combobox 绑定 MarkupExtension EnumBindingExtension public enumType

我们上一期讲到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
 }

运行后可看到
image

接下来。我们讲讲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文件

标签:自定义,Combobox,绑定,MarkupExtension,EnumBindingExtension,public,enumType
From: https://www.cnblogs.com/guchen33/p/17633219.html

相关文章

  • @JsonComponent注解自定义JSON序列化与反序列化
    1.概述本篇教程将聚焦于如何使用SpringBoot中的@JsonComponent通过使用这个注解,我们不需要手动引用ObjectMapper对象就可以将一个类暴露为Jackson的serializer与deserializer。由于这是SpringBoot提供的功能,所以我们不需要添加额外的依赖,我们可以直接在SpringBoot程序中使用它......
  • odoo15自定义小部件widget
    添加自定义widget的步骤比较简单,以下三步就可以了:1、JS实现widget的功能/*这个文件(文件名为my_basic_fields.js)要在__manifest__.py中设置,如下:'assets':{'web.assets_backend':['testaddons/static/src/js/my_basic_fields.js',],},*/odoo.define(�......
  • python重采样tif影像,自定义空间分辨率
    importwarningsimportnetCDF4warnings.filterwarnings('ignore')warnings.filterwarnings('ignore',category=DeprecationWarning)importnetCDF4importpandasaspdimportnumpyasnpfromosgeoimportgdalimportmatplotlib.pyplotasp......
  • Combobox后台绑定
    本文主要介绍WPF中Combobox的后台绑定,我在这里主要讲解数据驱动1、对于前台绑定,我们首先写出想要绑定的对象新建一个Models文件夹,将Student类写入publicclassStudent{publicintId{get;set;}publicstringName{get;set;}publicintAge{get......
  • 自定义实现可跨线程(线程池)的ThreadLocal
    packageTest0814;importcom.google.common.collect.Maps;importjava.util.HashMap;importjava.util.Map;importjava.util.WeakHashMap;publicclassMyThreadLocal<T>extendsInheritableThreadLocal<T>{//方法1publicstaticfinalInherita......
  • elementUi table表格 标头自定义,给表头加点击事件
    <el-table-columnlabel="">  <el-table-columnprop="column":render-header="renderHeader"width="160">    <templateslot-scope="scope">      <span>{{scope.row.column[......
  • 使用vue自定义指令实现按钮权限管理
    原文链接:https://www.jianshu.com/p/f7d6b9420cee官网链接:https://v2.cn.vuejs.org/v2/guide/custom-directive.html注册全局指令Vue提供了一个directive方法给我们注册自定义指令,在main.js中注册一个全局的自定义指令。directive方法接收两个参数:指令名称、包含指令钩子函......
  • 优维低代码实践:自定义模板
    优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。优维低代码实践连载第14期《自定义模板》▽一、概述构件是我们的页面最基......
  • 不背单词自定义词书制作与导入
    0前言最近不得不开始准备GRE了,从张巍公众号白嫖了好多单词书,但是我从高中开始就不习惯使用纸质材料背单词了,都是使用不背单词这个app了。没错,我的高中是允许带手机的哈哈哈不背单词的自定义词书功能还不完善。所以我花了一上午研究怎么把PDF导入进去思路:通过将pdf文件转成一......
  • 自定义springboot-starter包
    https://www.cnblogs.com/yuansc/p/9088212.html 前言我们都知道可以使用SpringBoot快速的开发基于Spring框架的项目。由于围绕SpringBoot存在很多开箱即用的Starter依赖,使得我们在开发业务代码时能够非常方便的、不需要过多关注框架的配置,而只需要关注业务即可。例如我想......