【发布时间】:2012-09-10 20:36:34
【问题描述】:
我有一个Enum,需要在ComboBox 中显示。我已经设法使用ItemsSource 将枚举值获取到组合框,并且我正在尝试对它们进行本地化。我认为这可以使用值转换器来完成,但由于我的枚举值已经是字符串,编译器会抛出 IValueConverter 无法将字符串作为输入的错误。我不知道有任何其他方法可以将它们转换为其他字符串值。还有其他方法可以做到这一点(不是本地化而是转换)?
我正在使用这个 marku 扩展来获取枚举值
[MarkupExtensionReturnType(typeof (IEnumerable))]
public class EnumValuesExtension : MarkupExtension {
public EnumValuesExtension() {}
public EnumValuesExtension(Type enumType) {
this.EnumType = enumType;
}
[ConstructorArgument("enumType")]
public Type EnumType { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider) {
if (this.EnumType == null)
throw new ArgumentException("The enum type is not set");
return Enum.GetValues(this.EnumType);
}
}
在 Window.xaml 中
<Converters:UserTypesToStringConverter x:Key="userTypeToStringConverter" />
....
<ComboBox ItemsSource="{Helpers:EnumValuesExtension Data:UserTypes}"
Margin="2" Grid.Row="0" Grid.Column="1" SelectedIndex="0" TabIndex="1" IsTabStop="False">
<ComboBox.ItemTemplate>
<DataTemplate DataType="{x:Type Data:UserTypes}">
<Label Content="{Binding Converter=userTypeToStringConverter}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
这里是转换器类,它只是一个测试类,还没有本地化。
public class UserTypesToStringConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return (int) ((Data.UserTypes) value) == 0 ? "Fizička osoba" : "Pravna osoba";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
return default(Data.UserTypes);
}
}
-- 编辑--
枚举由 ADO.NET Diagram 生成,无法更改。
【问题讨论】:
-
请出示
UserTypesToStringConverter的代码 -
能否发一下
UserTypesToStringConverter的相关代码。 -
您是否尝试过使用附属程序集使用 WPF 本地化?然后你不需要在代码中做任何本地化工作。 msdn.microsoft.com/en-us/library/ms788718.aspx - 你可以给这些标签控件一个 UID 和你的枚举的 ToString 值来解决这个特定的问题。
-
@MerlynMorgan-Graham 正如我所说,我问这个问题不是为了本地化问题。我想知道这种事情是怎么做到的。当您有大量枚举并希望用户选择值时;值需要“用户友好” - 修改、在单词之间添加空格等。
-
获取空格的一种常见方法是在枚举名称中使用下划线,然后在返回空格之前替换它们。作为一个选项,您还可以查看 Codeplex 上的 SpecializedEnum。它完成了枚举的大部分工作,但允许将任意类型用于值,这可能对此有用。 specializedenum.codeplex.com
标签: c# wpf binding datatemplate ivalueconverter