首页 > 其他分享 >wpf combobox 绑定枚举

wpf combobox 绑定枚举

时间:2023-06-14 11:34:43浏览次数:42  
标签:Description combobox Value enumValue 枚举 wpf Type public enumType

1、先定义个枚举转换类
/// <summary>
/// 枚举转换
/// </summary>
public class EnumerationExtension : MarkupExtension
{
private Type _enumType;

/// <summary>
/// 枚举转换
/// </summary>
/// <param name="enumType">zhi</param>
public EnumerationExtension(Type enumType)
{
if (enumType == null)
throw new ArgumentNullException("enumType");

EnumType = enumType;
}
/// <summary>
/// enum
/// </summary>
public Type EnumType
{
get { return _enumType; }
private set
{
if (_enumType == value)
return;

var enumType = Nullable.GetUnderlyingType(value) ?? value;

if (enumType.IsEnum == false)
throw new ArgumentException("Type must be an Enum.");

_enumType = value;
}
}
/// <summary>
/// ProvideValue
/// </summary>
/// <param name="serviceProvider">1</param>
/// <returns>object</returns>
public override object ProvideValue(IServiceProvider serviceProvider)
{
var enumValues = Enum.GetValues(EnumType);

return (
from object enumValue in enumValues
select new EnumerationMember
{
Value = enumValue,
Description = GetDescription(enumValue)
}).ToArray();
}

private string GetDescription(object enumValue)
{
var descriptionAttribute = EnumType
.GetField(enumValue.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false)
.FirstOrDefault() as DescriptionAttribute;


return descriptionAttribute != null
? descriptionAttribute.Description
: enumValue.ToString();
}
/// <summary>
/// EnumerationMember
/// </summary>
public class EnumerationMember
{
/// <summary>
/// Description
/// </summary>
public string Description { get; set; }
/// <summary>
/// Value
/// </summary>
public object Value { get; set; }
}
}

2、在wpf中使用

先引用上边的转换类文件
xmlns:comModel1="clr-namespace:NE.Model.Extend;assembly=NE.Model.Extend"

方法一:直接用
<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding Source={util:Enumeration {x:Type comModel:EGetWorkStepType}}}"
DisplayMemberPath="Description" SelectedValue="{Binding DataFilte_WorkTypeModel}" SelectedValuePath="Value"/>


方法二:DataGrid中使用
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn Header="方法" Width="10*" MinWidth="55" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
Width="{Binding ElementName=Method, Path=ActualWidth}"
Margin="-10,0,0,0"
Padding="10,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Background="Transparent"
BorderThickness="0"
ItemsSource="{Binding Source={util:Enumeration {x:Type comModel1:ERequestMethod}}}" DisplayMemberPath="Description"
SelectedValue="{Binding Method, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Value">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

标签:Description,combobox,Value,enumValue,枚举,wpf,Type,public,enumType
From: https://www.cnblogs.com/w-pound/p/17479719.html

相关文章

  • WPF之资源
    静态资源(StaticResource):指的是在程序载入内存时对资源的一次性使用,之后就不再去访问这个资源了。动态资源使用(DynamicResource):指的是在程序运行过程中仍然会去访问资源。在网上看了一些介绍,不能实现,或许是我VS版本的问题,于是自己改动了一些。代码1:在Window的资源里放置两个TextBloc......
  • Winform/WPF Clipboard之剪切复制粘贴
    转载自作者:心存善念本文地址:https://www.cnblogs.com/xcsn/p/4678364.htmWinform///<summary>///复制粘贴帮助类///</summary>publicclassClipboardHelper{///<summary>///复制到剪切板///</summary>//......
  • WPF 绑定command在触屏上操作时,即使点中button也可能不触发
    现象:WPF程序绑定的command在触摸屏上,点击button后,button绑定的事件偶尔会出现不响应的情况。确认100%点击有效,不会出现误触的情况。但是用鼠标点击,绝对不会出现这种现象。 原因:在非触屏环境,bingdingcommand是由点击来触发,即是使用鼠标等输入设备来执行点击触发command,调用......
  • 枚举
    1.饥饿的牛来源:USACO2023FebruaryContestBronze原题链接题目描述贝茜是一头饥饿的牛。每天晚上,如果牛棚中还有干草的话,贝茜都会吃掉其中的一捆。初始时,牛棚中没有干草。为了让贝茜不被饿死,农夫约翰制定了\(N\)个给贝茜送干草的计划。其中第\(i\)个计划是在第\(......
  • xt中combobox在grid显示问题
    xt中combobox在grid显示问题问题描述:我在editgrid中嵌一个combox,combox的下拉单是文字的,但是提交时用数字代码表示。但是我的grid只显示数字代码,不显示对应的文字.嘿嘿,这可问题对于我这样的初学者讲根本就不懂,呵呵,google了一下,找到解决办法,嘿嘿,不过我只......
  • 枚举的方法、枚举案例 - 状态机、组织枚举、策略枚举、枚举工具类 - EnumSet 和 EnumM
    引入编写季节类(Season),该类只有四个对象(spring,summer,autumn,winter)概念枚举(enum)全称为enumeration,是JDK1.5中引入的新特性。语法publicenumColor{//默认添加publicstaticfinalRED,GREEN,BLUE;}本质尽管枚举看起来像是一种新的数据类型,实际上,枚举就是一种受限制......
  • POJ 3498 March of the Penguins(枚举+最大流)
    题意:在X,Y坐标系中有N(N<=100)个冰块...有些冰块上有若干只企鹅..每只企鹅一次最多跳M距离..一个冰块在有Mi个企鹅离开..就会消失..问有哪些冰块可以作为集合点..就是所有企鹅都能成功到这个冰块上来.思路:枚举每一块冰块,看看最大流能否等于企鹅总数即可      建图:把每块......
  • WPF控件库之HandyControl
    HandyControl介绍HandyControl是一套WPF控件库,它几乎重写了所有原生样式,同时包含80余款自定义控件(正逐步增加)。安装使用github地址:https://github.com/HandyOrg/HandyControl官网地址:https://handyorg.github.io/......
  • C# 智能枚举
    publicclassPriorityStatus:SmartEnum<PriorityStatus>{publicstaticreadonlyPriorityStatusBacklog=new(nameof(Backlog),0);publicstaticreadonlyPriorityStatusCritical=new(nameof(Critical),1);protectedPriorityStatus(stringname......
  • WPF 入门笔记 - 03 - 样式基础
    ......