wpf之DataGrid绑定DataTable,其中DataGridComboBoxColumn双向绑定枚举enum

百度了快一天,没结果,除了几个原创的,都是复制粘贴的内容。

不想用别的笨办法,于是脑洞大开,想出了我的办法。

首先是前台代码,与网上的比较类似:

xmlns:jz="clr-namespace:*****.Model;assembly=****"     xmlns:utils="clr-namespace:*******.util"        xmlns:core="clr-namespace:System;assembly=mscorlib"        mc:Ignorable="d"        Title="数据项管理" Height="500" Width="700" Name="window" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow">    <Window.Resources>        <utils:SoftDataFormatConverter x:Key="SoftDataFormatConverter"/>        <ObjectDataProvider x:Key="SoftDataFormatEnumKey" MethodName="GetValues"  ObjectType="{x:Type core:Enum}">            <ObjectDataProvider.MethodParameters>                <x:Type Type="jz:SoftDataFormat"/>            </ObjectDataProvider.MethodParameters>        </ObjectDataProvider>    </Window.Resources>

<DataGridComboBoxColumn Header="数据类型" ItemsSource="{Binding Source={StaticResource SoftDataFormatEnumKey}}" SelectedItemBinding="{Binding SoftDataFormat, Converter={StaticResource SoftDataFormatConverter}, Mode=TwoWay}"/>

我的DataGrid绑定的是DataTable,然后,DataGridComboBoxColumn 绑定中的 【SelectedItemBinding="{Binding SoftDataFormat】,要注意大小写,被坑了一阵子。

接下来是百度不到的“核心科技”:

namespace *****.util{    [ValueConversion(typeof(int), typeof(SoftDataFormat))]    public class SoftDataFormatConverter : IValueConverter    {        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)        {            if (int.TryParse(value.ToString(), out int vInt))            {                return (SoftDataFormat)vInt;            }            else            {                return (SoftDataFormat)Enum.Parse(typeof(SoftDataFormat), value.ToString());            }        }        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)        {             return (int)(SoftDataFormat)Enum.Parse(typeof(SoftDataFormat), value.ToString());        }    }}

上班时间,写的比较简单,文中没有提到的地方,比如一些格式转换等,都比较简单,少了会报错,比较好改。

(0)

相关推荐

  • C# 枚举转列表

    独立观察员 2020 年 9 月 1 日 今天有朋友问我,ComboBox 怎么绑定一个 Enum,其实他的意思是枚举如何转换为列表.想想这确实是一个挺正常的需求,但我一时也只想到遍历,他觉得麻烦,于 ...

  • C#手动建立Table后,并设置列和赋值

    C#手动建立Table后,并设置列和赋值 public DataTable CreateTable() { //创建Table1 DataTable dt = new DataTable(); //对 ...

  • c#枚举使用详解

    简介 1. 枚举(enum type)通常用来表示一组常量.由于枚举是强类型的,这在编程中给我们提供了极大的方便. 2. 枚举的定义: public enum Sex { 男 = 0, 女 = 1 } ...

  • 18 vue 实例及其双向绑定的实现原理

    目录 一个vue实例 生命周期钩子函数 set/get 访问器属性的实现 v-model属性与{{text}}在模板中是如何被解析的? 观察者模式 源码 一个vue实例 一个典型的vue实例: < ...

  • Vue2 源码阅读(三) 双向绑定原理

    Vue2 源码阅读(三) 双向绑定原理

  • 前端面试题整理——VUE双向绑定原理

    VUE2.0和3.0数据双向绑定的原理,并说出其区别. 代码: <!DOCTYPE html> <html lang="en"> <head> ...

  • 前端面试 vue 部分 (2)——Vue是如何实现双向绑定的

    数据的双向绑定 当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel 也能监听到视图的变化,然后通知数据做改动,这实际上就实 ...

  • 如何通过发布订阅模式实现数据的双向绑定

    -在vue框架中我们使用v-model的方式来进行数据的双向绑定,那么现在我们不通过vue框架给我们提供支持,自己手动怎么去封装一个v-model的方法? · 举个例子以下是我们的dom结构 - 在没 ...

  • 简述vue的双向绑定原理

    一.前言 在vue的视图层与modal层进行数据交互的时,视图层的数据传入到modal层,modal层通过defineProperty来劫持每个元素,并绑定监听事件进行监听,一旦监听到数据变化,就通过 ...

  • 【maya绑定教程】蜘蛛的绑定

    40:19[maya绑定教程]蜘蛛的绑定5--整理清理结尾 1492-7 35:34[maya绑定教程]蜘蛛的绑定4--腿部自动路径的搭建 732-7 32:50[maya绑定教程]蜘蛛的绑定3--I ...

  • WPF 因设置不期望的DataContext,导致的绑定异常

    在MainWindow中,创建一个背景属性BrushTest,并将其绑定至界面上UserControl的BackgroundTest属性 1 <Window x:Class="WpfA ...

  • WPF DataGrid出现红框处理

    当DataGrid属于单元格选中时出现红框,是因为WPF中DataGrid拥有默认的验证属性,如需关闭,请在DataGrid中加入以下属性: Validation.ErrorTemplate=&quo ...