ИМХО, лучше использовать конвертер.
Первое, что вы должны сделать, это реализовать простой атрибут, чтобы добавить некоторые метаданные к вашим элементам enum. Вот основной пример (без интернационализации для простоты):
public enum StepStatus {
[StringValue("Not done yet")]
NotDone,
[StringValue("In progress")]
InProgress,
[StringValue("Failed")]
Failed,
[StringValue("Succeeded")]
Succeeded
}
Кроме того, вы можете написать служебный класс, способный преобразовывать элемент enum в соответствующее представление 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;
}
/// <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}}" ... />
Проверьте следующую страницу ; он дает пример, который поддерживает интернационализацию, но в принципе принцип тот же ..