wpf - 将枚举类型绑定(bind)到文本框

标签 wpf binding enums textbox

我将 textbox.text 值绑定(bind)到枚举类型。
我的枚举看起来像这样

public enum Type
    {

        Active,

        Selected,

        ActiveAndSelected
    }

我不想完成的是在文本框上显示“事件模式”而不是“事件”等等。有可能这样做吗?如果我可以在 XAML 中完成它会很棒 - 因为我在样式文件 style.xaml 中拥有所有绑定(bind)

我试图使用描述属性,但似乎还不够

最佳答案

恕我直言,使用转换器是一种更好的方法。

您应该做的第一件事是实现一个简单的属性,以便将一些元数据添加到您的枚举元素。这是一个基本示例(为简单起见,没有国际化):

    public enum StepStatus {
    [StringValue("Not done yet")]
    NotDone,
    [StringValue("In progress")]
    InProgress,
    [StringValue("Failed")]
    Failed,
    [StringValue("Succeeded")]
    Succeeded
}

接下来,您可以编写一个实用程序类,该类能够使用反射将枚举元素转换为其对应的 StringValue 表示。在 Google 中搜索“C# 中的字符串枚举 - CodeProject”,您会找到 CodeProject 的关于此的文章(对不起,我的低声誉不会让我添加链接..)

现在您可以实现一个转换器,它只是将转换委托(delegate)给实用程序类:
    [ValueConversion(typeof(StepStatus), typeof(String))]
public class StepStatusToStringConverter: IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture){
        String retVal = String.Empty;

        if (value != null && value is StepStatus) {
            retVal = StringEnum.GetStringValue((StepStatus)value);
        }

        return retVal;
    }

    /// <summary>
    /// ConvertBack value from binding back to source object. This isn't supported.
    /// </summary>
    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture) {
        throw new Exception("Can't convert back");
    }
}

最后,您可以在 XAML 代码中使用转换器:
<resourceWizardConverters:StepStatusToStringConverter x:Key="stepStatusToStringConverter" />
...
<TextBox Text="{Binding Path=ResourceCreationRequest.ResourceCreationResults.ResourceCreation, Converter={StaticResource stepStatusToStringConverter}}" ... />

检查以下page ;它给出了一个支持国际化的例子,但基本上原理是一样的..

关于wpf - 将枚举类型绑定(bind)到文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695976/

相关文章:

c# - 调整 WP8 WebBrowser 高度以适合内容

.net - 在 DotNet RGB24 或 RGB32 中使用什么来提高性能

wpf - 设计时 XAML 的默认值

javascript - AngularJS 指令 transclude scope=false?

c# - 当托管在 VSTO/Outlook 加载项中的 ElementHost 中时,WPF 文本框不允许撤消

wpf - 在 WPF 中突出显示整个 TreeViewItem 行

Java 枚举 : Having Multiple Strings within one Enums

c++ - 访问命名空间中的枚举

java - 自定义 JAXB 生成以包含 ObjectFactory 类的 @XmlElementDecl 注释

java - 带枚举的扫描仪,Java