@uubooks 按你的需求 WPF 很容易实现。控件 bind 数据源的属性( Car.Color ),然后通过 bind 的 convert 转换到你想要的语言。用户看到的显示值其实是 covert 的结果,但是选择的其实还是属性的值。所以未必需要反射来实现。
花点时间入门下 WPF 吧,你会发现如果是面向 Windows 桌面开发,WPF 太爽了。看懂 WPF bind 就差不多可以跟 Winform 对着干了。
抛个砖,抄段代码,别纠结于细节(逃
*.cs
/// <summary>
/// 将性别转换为字符串
/// </summary>
public class ConverterSexsAnimal2String : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value.ToString() == string.Empty)
return SexsAnimalConverter.ToString(Sexs.Unknow);
Sexs type = (Sexs)System.Enum.Parse(typeof(Sexs), value.ToString());
return SexsAnimalConverter.ToString(type);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
string SexsAnimalConverter.ToString(Sexs sex)
{
string str;
switch (sex)
{
case Sexs.Male:
{
// 这里就是多国语言的每个字段对应的 key,具体去看怎么实现多国语言的。
str = ResourceHelper.FindResoure(“str_Male”);
break;
}
case Sexs.Female:
{
str = ResourceHelper.FindResoure(“str_Female”);
break;
}
case Sexs.Unknow:
{
str = ResourceHelper.FindResoure(“str_SexUnkonw”);
break;
}
default:
str = string.Empty;
break;
}
return str;
}
界面 bind
.xaml
这里是单向 bind,你得看 Mode 可选项。
<DataGridTextColumn Binding=”{Binding Sex,Converter={StaticResource ConverterSexsAnimal2String}, Mode=OneWay}” ……. />