在我看来,使用转换器是更好的方法。
第一件要做的事情是实现一个简单的属性,以便为您的枚举元素添加一些元数据。这是一个基本示例(为了简单起见,没有包含国际化):
public enum StepStatus {
[StringValue("Not done yet")]
NotDone,
[StringValue("In progress")]
InProgress,
[StringValue("Failed")]
Failed,
[StringValue("Succeeded")]
Succeeded
}
接下来,您可以编写一个实用类,使用反射从枚举元素转换为其对应的StringValue表示法。在Google中搜索“C#中的字符串枚举 - CodeProject”,您将找到CodeProject关于此主题的文章(抱歉,我的知名度不够高,无法添加链接..)
现在,您可以实现一个简单的转换器,将转换委托给实用类:
[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;
}
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}}" ... />
请查看以下页面,它提供了一个支持国际化的示例,但基本原则是相同的。