首页 > 其他分享 >WPF绑定枚举并且显示特性文本

WPF绑定枚举并且显示特性文本

时间:2024-11-20 19:33:55浏览次数:1  
标签:绑定 return object System value 枚举 WPF Type enumType

一、文件结构

 

二、文件内容

FlattenMethodEnum.cs
     public enum FlattenMethodEnum
    {
        [Description("单点")]
        SinglePoint = 0,
        [Description("平均")]
        Average = 1,
    }
}

EnumBindingSourceExtension.cs

using System.Windows.Markup;
using System.Diagnostics.CodeAnalysis;
namespace Test.Helper { class EnumBindingSourceExtension : MarkupExtension { private Type? _enumType; public Type? EnumType { get => _enumType; set { if (value != _enumType) { if (value != null) { Type enumType = Nullable.GetUnderlyingType(value) ?? value; if (!enumType.IsEnum) throw new ArgumentException("Type must be for an Enum."); } _enumType = value; } } } public EnumBindingSourceExtension() { } public EnumBindingSourceExtension(Type enumType) { EnumType = enumType; } public override object ProvideValue(IServiceProvider serviceProvider) { if (_enumType == null) throw new InvalidOperationException("The EnumType must be specified."); var actualEnumType = Nullable.GetUnderlyingType(_enumType) ?? _enumType; var enumValues = System.Enum.GetValues(actualEnumType); if (actualEnumType == _enumType) return enumValues; var tempArray = Array.CreateInstance(actualEnumType, enumValues.Length + 1); enumValues.CopyTo(tempArray, 1); return tempArray; } } }

EnumDescriptionConverter.cs

using System.Windows.Data;
using System.ComponentModel;
using System.Globalization;
using System.Windows;

namespace Test.Helper
{
     class EnumDescriptionConverter:IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
                return DependencyProperty.UnsetValue;

            return GetEnumDescription(value);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return string.Empty;
        }

        private string GetEnumDescription(object enumObj)
        {
            var fi = enumObj.GetType().GetField(enumObj.ToString());

            DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

            if (attributes != null && attributes.Length > 0)
                return attributes[0].Description;
            else
                return enumObj.ToString();
        }
    }
}

三、使用

1、在View中引入命名空间

xmlns:enum="clr-namespace:Test.Enum"
xmlns:helper="clr-namespace:Test.Helper"  

2、引入资源; Tip:注意UserControl还是Window等

<UserControl.Resources>
    <helper:EnumBindingSource x:Key="enumDataSource" EnumType="{x:Type enum:SampleTypeEnum}"/>
    <helper:EnumDescriptionConverter x:Key="enumDescriptionConverter"/>
</UserControl.Resources>

3、ViewModel

[ObservableProperty]
private SampleTypeEnum sampleTypeEnum;

4、xaml

<ComboBox Width="80" Height="20"
          ItemsSource="{Binding Source={StaticResource enumDataSource}}"
          SelectedItem="{Binding SampleTypeEnum}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter}}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

 

实现前台绑定

标签:绑定,return,object,System,value,枚举,WPF,Type,enumType
From: https://www.cnblogs.com/nihaozaijian/p/18519329

相关文章

  • WPF的Popup自动显示隐藏
    简单实现鼠标移过Popup自动显示和隐藏的功能;在xaml.cs中实现,首先创建一个定时器,设置300ms的延时:1DispatcherTimertimer;23publicFunction1View()4{5InitializeComponent();67timer=newDispatcherTim......
  • echarts 绑定事件处理函数
    echartson文档echartsInstance.on(eventName,)https://www.cnblogs.com/Cxymds/p/17491486.htmlhttps://blog.csdn.net/weixin_42079403/article/details/137536279https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=baiduhome_pg&wd=ech......
  • winform,wpf利用Autoupdater.NET.Official实现自动更新,并且利用Setup project部署(母
    Winform部分新建winform/wpf,我这里创建的是winform,程序名UpdateDemo在NuGet安装必备库Autoupdater.NET.Official,我这里安装的版本是1.9.2在页面上写一个label在Form1的构造函数写入代码AutoUpdater.Start("http://172.30.3.158:80/AutoUpdater.xml");这里填写自己的IPpublic......
  • WPF Prism (一):区域导航
    文章目录前言一、Prism简介二、Prism安装1.NuGet进行安装2.扩展安装三、区域导航(Navigation)修改App.xaml修改App后台代码项目结构进行注册导航使用导航ViewModelLocator视图模型定位器设置Region容器四、示例代码前言最近使用WPF开发准备学习一下Prism框架后面......
  • WPF简单的数据绑定示例
    publicpartialclassindex:INotifyPropertyChanged{publicindex(){InitializeComponent();DataContext=this;}privatestring_userName;publicstringUserName{......
  • 界面控件DevExpress WPF中文教程:网格视图数据布局的列和卡片字段
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • C#-WPF 常见类型转换方法(持续更新)
    目录一、普通类型转换1、Convert类2、Parse(转String)3、TryParse(转String)4、ToString(转String)5、int转double 6、自定义类型的显示/隐式转换二、byte[]转ImageSource方法一方法二一、普通类型转换1、Convert类提供了一种安全的方式来执行类型转换,可处理n......
  • WPF ListBox implement autoscroll via behavior extension and SelectedItem
    publicclassListBoxAutoScrollBehavior:Behavior<ListBox>{protectedoverridevoidOnAttached(){AssociatedObject.SelectionChanged+=AssociatedObject_SelectionChanged;base.OnAttached();}privatevoidAs......
  • 将 WPF 嵌入到 MFC 中,无法响应键盘输入
    在将WPF窗口嵌入到MFC窗口中中提到,可以将WPF嵌入到MFC窗口中,但遗留了一个没有发现的问题,WPF界面,无法响应键盘的输入。示例源码已经在https://gitee.com/Jasongrass/DemoPark/tree/master/Code/Embed_WPF_to_MFC/MFCMerge......
  • 如何在WPF中嵌入其它程序
    在WPF中嵌入其它程序,这里提供两种方案 一、使用WindowsFormHost使用步骤如下1、添加WindowsFormsIntegration和System.Windows.Forms引用  2、在界面上放置WindowsFormHost和System.Windows.Forms.Panel1<Grid>2<WindowsFormsHost>3<winform:Pa......