是否可以将数据绑定到枚举并显示用户友好的值? [复制]

2023-12-14

我想显示我的合同的状态,两者声明如下:

public enum RentStatus
{
    [Description("Preparation description")]
    Preparation,
    [Description("Active description")]
    Active,
    [Description("Rented to people")]
    Rented
}

public class RentContract
{
    public int RentContractId { get; set; }
    public virtual Premise Premise { get; set; }
    public double Price { get; set; }
    public RentStatus Status { get; set; }
}

我当前的 XAML 是错误的

<ComboBox x:Name="RentStatusComboBox"
                ItemsSource="{Binding RentContract}"
                Grid.Row="2"
                Grid.Column="1"
                HorizontalAlignment="Stretch"
                SelectedItem="{Binding RentContract.Status}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Description}" Padding="0" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我见过几个使用转换器和方法的解决方案,但我不认为这些解决方案能够允许数据绑定,以便当我更改 UI 中的状态时更新我的​​实体。

编辑:正在关注这篇优秀的博文解决了我的问题。


您可以为枚举创建扩展方法,并使用反射来设置描述。参考下面的代码。

<ComboBox Width="200" Height="25" ItemsSource="{Binding ComboSource}"
              DisplayMemberPath="Value"
              SelectedValuePath="Key"/>
 public class MainViewModel
{
    public List<KeyValuePair<RentStatus, string>> ComboSource { get; set; }

    public MainViewModel()
    {
        ComboSource = new List<KeyValuePair<RentStatus, string>>();
        RentStatus re=RentStatus.Active;
        ComboSource = re.GetValuesForComboBox<RentStatus>();
    }
}

public enum RentStatus
{
    [Description("Preparation description")]
    Preparation,
    [Description("Active description")]
    Active,
    [Description("Rented to people")]
    Rented
}

public static class ExtensionMethods
{       
    public static List<KeyValuePair<T, string>> GetValuesForComboBox<T>(this Enum theEnum)
    {
        List<KeyValuePair<T, string>> _comboBoxItemSource = null;
        if (_comboBoxItemSource == null)
        {
            _comboBoxItemSource = new List<KeyValuePair<T, string>>();
            foreach (T level in Enum.GetValues(typeof(T)))
            {
                string Description = string.Empty;                    
                FieldInfo fieldInfo = level.GetType().GetField(level.ToString());
                DescriptionAttribute[] attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);                    
                if (attributes != null && attributes.Length > 0)
                {
                    Description = attributes.FirstOrDefault().Description;
                }
                KeyValuePair<T, string> TypeKeyValue = new KeyValuePair<T, string>(level, Description);
                _comboBoxItemSource.Add(TypeKeyValue);
            }
        }
        return _comboBoxItemSource;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以将数据绑定到枚举并显示用户友好的值? [复制] 的相关文章

  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • WPF 绑定 CompositeCollection 中的 MenuItem 不起作用

    我在将命令绑定到复合集合中的菜单项时遇到问题 这MenuItem是其一部分ContextMenu这是定义在UserControl Resources 问题是新标签的绑定不起作用 当我将 MenuItem 放置在复合集合之外时 它将起作用 有
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象

    我意识到已经有人问过这个问题 但到目前为止我读过的解决方案似乎没有什么作用 我正在使用 Entity Framework 6 1 和 AutoMapper 3 1 1 采取以下对象 Company and CompanyListItem 我
  • 列出所有外键 PostgreSQL

    我需要一个返回的查询 表名 字段名 字段类型 约束名 到目前为止我有 select conrelid regclass AS table name regexp replace pg get constraintdef c oid 1 as
  • Gradle,命令行“cmd”、“/c”、“echo doLast!”什么也没做

    我正在读关于Gradle 执行程序并创建了以下内容build gradle task startTomcat type Exec commandLine cmd c echo init startTomcat task stopTomcat
  • 在 Javascript 中获取时区的 utc 偏移量

    我需要一个 Javascript 函数 给定时区 返回当前 UTC 偏移量 例如 theFuncIneed US Eastern gt 240 如今这已成为可能Intl API 实施Intl是基于icu4c 如果您挖掘源代码 您会发现时区名
  • 通过 spring-rabbitmq 自动重试连接到代理

    我读过这个文档片段 RabbitMQ 自动连接 拓扑恢复 自 Spring AMQP 第一个版本以来 该框架提供了其 在代理发生故障时 可以恢复自己的连接和通道 此外 如第 3 1 10 节 配置代理 中所述 RabbitAdmin 将在以
  • 注释时间序列图

    我有一个日期索引数组 x 日期时间对象 和一个实际值数组 y 债券价格 执行以下操作 plot x y 生成一个完美的时间序列图 其中 x 轴标有日期 到目前为止没有问题 但我想在某些日期添加文本 例如 在2009年10月31日 我希望显示
  • 如何控制ConsumerGroup处理消息的并发度

    我正在使用 kafka node ConsumerGroup 来消费来自主题的消息 ConsumerGroup在消费消息时需要调用外部API 甚至可能需要一秒钟才能响应 我希望控制消费队列中的下一条消息 直到收到 API 的响应 以便按顺序
  • 尝试从 SAML 创建声明时出现错误“WIF10201:未找到有效的键映射”

    我正在尝试验证来自第三方 Siteminder IDP 的 SAML 响应 我已经安装了他们提供的证书 当我打电话给验证令牌方法 System IdentityModel Tokens 创建声明 我收到以下错误 WIF10201 找不到有效
  • Postgres 查询获取所有孩子的 id

    我是一个 SQL 菜鸟 到目前为止只编写了非常基本的查询 我有一张看起来像这样的桌子 item full name varchar 65535 item id bigint item owners varchar 255 item appr
  • git lock 错误背后的原因

    我正在一个拥有数百个分支的大型 git 存储库中工作 我在 Windows 上 通常当我git pull 它给了我多个锁定错误 例如 error cannot lock ref refs remotes origin branchname
  • 如何检测 UITableView beginUpdates/endUpdates 上的动画已结束?

    我正在使用插入 删除表格单元格insertRowsAtIndexPaths deleteRowsAtIndexPaths包装成beginUpdates endUpdates 我也在使用beginUpdates endUpdates调整 ro
  • 文件夹权限 - 部分或全部身份引用无法翻译

    我想在远程服务器上为域用户设置文件夹 ACL 但总是收到以下错误消息 部分或全部身份参考无法翻译 我究竟做错了什么 这是我的代码 string folderPath remoteServer testDirectory string acc
  • 两次时间之差(以分钟为单位)[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我见过一些使用 Joda Time 和其他方法来计算两个日期之间以毫秒为单位的差异的示例 但是如何将这些应用到仅以分钟为单位计算两个时间之间的差异呢 例如 下午 2 45 和上午 1
  • PHP 致命错误:调用未定义的函数?

    因此 当我将网站托管在我的网络主机上时 我的网站出现了问题 我收到这个错误 PHP Fatal error Call to undefined function getSkillIcons 奇怪的是 在本地 Xampp 它工作得很好 这就是
  • Qt:如何获取正在运行的 QProcess 的实时输出

    我必须在 QProcess 运行时获取它的输出 因此我编写了以下代码 CommandExecutor C CommandExecutor C mProcessStatus AI UNKNOWN mOnTdiActiveCallback mT
  • 使用 Embed API 嵌入 Google Analytics 位置地图视图

    下面是 Google 分析网站上的视图屏幕截图 地理位置 gt 位置 gt 主要维度 城市 我想嵌入这个确切的视图 或者使用 google 的 Embed API 尽可能类似地复制它 并将其显示在我自己的网站上 我已经按照这里的教程进行操作
  • 为什么要使用指针(性能)?

    我想知道是否有关于原始对象与对象指针的性能基准 我知道在引用类型 例如地图 上使用指针是没有意义的 所以请不要提及它 我知道如果数据需要更新 您 必须 使用指针 所以请不要提及它 我发现的大多数答案 文档基本上都改写了官方文档中的指南 If
  • 类装饰器Nestjs修改类中的每个方法

    我想创建一个装饰器 它可以获取类的所有方法并用某些功能包装它们 对于这个例子 只需像这样记录 export function CustDec
  • MuleStudio studio:工作室目标未能执行

    我在 Mule Studio 工作区 从 Mule Studio 中 复制 粘贴了一个工作项目来创建一个新项目 之后 我可以在新项目上进行 mvn clean 安装 一切正常 然后 在对 pom 进行任何修改 即添加空行 后 我收到以下错误
  • 是否可以将数据绑定到枚举并显示用户友好的值? [复制]

    这个问题在这里已经有答案了 我想显示我的合同的状态 两者声明如下 public enum RentStatus Description Preparation description Preparation Description Acti