这里给出一个通用的解决方案,虽然复杂了一些,但是可用性和扩张性均有大大提高。
显然这里自己去实现自定义格式化,即通过IFormatable、IFormatProvider、ICustomFormatter等接口已达到Globalization有点小题大作了,而另外一个很容易想到的点是通过DiaplayMember实现显示值得自定义(对于简单Binding,例如ComboBox、ListBox等只用重载ToString就可以了)。
既然有了方向,那就动手了。
首先,我们希望Binding整个枚举类型的每一个值,也就是说,我们需要把这个枚举的所有值变成一个数据源,为了实现这一点,我们可以使用Enum上的helper方法Enum.GetValues(Type)来返回一个对所有值得枚举,然后依次添加到IList对象或者IListSource接口即可。
1
if (!typeof(EnumType).IsEnum)
2
}
然后,取到了值,由于我们希望自定义Binding显示,那么需要对枚举值进行封装,而在这个封装里面,我们可以实现多语言的支持。2
1
}
至此,整个功能的框架已经完成,下面我们来看看一些细节——如何对资源读取和管理的封装:
1
}
OK,大功告成,有了这么一个封装,在应用里就可以简单的这么几句够搞定。
1
private void Form1_Load(object sender, EventArgs e)
2
}
你可以从这里下载本篇中的相关示例代码:2
https://files.cnblogs.com/winkingzhang/Demo_2008_03_25.rar