【问题标题】:Binding combo to localized enum property将组合绑定到本地化枚举属性
【发布时间】:2016-10-28 13:20:19
【问题描述】:

我已经看到了很多关于这方面的资源,结果或所有的方法和复杂性都各不相同。例如:

Binding SelectedValue of ComboBox to enum in WPF

Is it possible to databind to a Enum, and show user-friendly values?

我有 3 组枚举:

public enum StudentGender
{
    [XmlEnum(Name ="M")]
    Male,
    [XmlEnum(Name = "F")]
    Female
}

public enum StudentAppointed
{
    [XmlEnum(Name = "E")]
    Elder,
    [XmlEnum(Name = "MS")]
    MinisterialServant,
    [XmlEnum(Name = "X")]
    NotAppointed
}

public enum StudentServing
{
    [XmlEnum(Name = "R")]
    RegularPioneer,
    [XmlEnum(Name = "P")]
    Publisher,
    [XmlEnum(Name = "U")]
    UnbaptisedPublisher,
    [XmlEnum(Name = "S")]
    Studying
}

我正在实现一个弹出窗口,上面有一些组合框。它正在使用绑定:

以下是 3 个组合框之一的绑定示例:

<StackPanel Grid.Row="2" Grid.Column="0" Margin="2" Background="WhiteSmoke">
    <Label>Serving As:</Label>
    <ComboBox x:Name="comboServingAs" SelectedItem="{Binding Serving}" SelectedIndex="2">
        <ComboBoxItem>Studying</ComboBoxItem>
        <ComboBoxItem>Unbaptized Publisher</ComboBoxItem>
        <ComboBoxItem>Publisher</ComboBoxItem>
        <ComboBoxItem>Regular Pioneer</ComboBoxItem>
    </ComboBox>
</StackPanel>

在上述情况下,Serving 是以下属性:

[XmlAttribute(AttributeName ="Publisher")]
public StudentServing Serving { get; set; }

如前所述,我已经看到了复杂程度各不相同的以前的想法。但如果可能的话,我会尽量避免必须实施同样的事情三次。我可以有一个可以适用于所有这些的解决方案吗?

在每种情况下,我都需要将选定的组合框项与关联的属性枚举映射,这样一切正常。我现在意识到这是错误的。

性别组合变得更加复杂,因为我在那里使用兄弟/姐妹也是有原因的。

我也确实看到了上述答案中提到的[DescriptionAttribute]。我突然想到我的枚举实际上实际上是整数。那么为什么我不能根据所选索引值以某种方式向/从正确的枚举转换?

我希望我的问题不会太混乱。

【问题讨论】:

  • “那么为什么我不能根据所选索引值以某种方式向/从正确的枚举转换?”我猜答案是:你还没有尝试过。是什么阻止您编写三个将索引映射到枚举值并使用这些 ValueConverters 绑定到组合框的 SelectedIndex 而不是 SelectedItem 的 ValueConverter?
  • @MarkusHütter 我不鼓励通过索引处理它。根据我的回答,我找到了另一种方法。谢谢。

标签: c# wpf binding combobox enums


【解决方案1】:

我找到了一篇很好的文章 here 帮助了我!

我按照上面教程中的描述添加了事件处理程序,然后就可以处理所有事情了!

已排序。

【讨论】:

  • @MarkusHütter 请问使用事件处理程序如何使它更简单?我有兴趣。你有相关链接吗?谢谢。
  • @MarkusHütter 我现在明白你了。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2018-11-12
  • 2020-02-07
相关资源
最近更新 更多