У меня есть перечисление вроде
Enum Complexity
{
NotSoComplex,
LittleComplex,
Complex,
VeryComplex
}
И я хочу использовать его в раскрывающемся списке, но не хочу видеть такие имена Camel в списке (выглядит очень странно для пользователей). Вместо этого я хотел бы иметь нормальную формулировку, например Не так сложно Маленький комплекс (и т.д.)
Кроме того, мое приложение является многоязычным, и я хотел бы иметь возможность отображать те строки, которые были локализованы, и я использую хелпер, TranslationHelper (string strID), который дает мне локализованную версию для идентификатора строки.
У меня есть рабочее решение, но не очень элегантное: Я создаю вспомогательный класс для перечисления, с одним членом Complexity и ToString(), перезаписанным, как показано ниже (упрощен код)
public class ComplexityHelper
{
public ComplexityHelper(Complexity c, string desc)
{ m_complex = c; m_desc=desc; }
public Complexity Complexity { get { ... } set {...} }
public override ToString() { return m_desc; }
//Then a static field like this
private static List<Complexity> m_cxList = null;
// and method that returns the status lists to bind to DataSource of lists
public static List<ComplexityHelper> GetComplexities()
{
if (m_cxList == null)
{
string[] list = TranslationHelper.GetTranslation("item_Complexities").Split(',');
Array listVal = Enum.GetValues(typeof(Complexities));
if (list.Length != listVal.Length)
throw new Exception("Invalid Complexities translations (item_Complexities)");
m_cxList = new List<Complexity>();
for (int i = 0; i < list.Length; i++)
{
Complexity cx = (ComplexitylistVal.GetValue(i);
ComplexityHelper ch = new ComplexityHelper(cx, list[i]);
m_cxList.Add(ch);
}
}
return m_cxList;
}
}
Несмотря на то, что я работоспособен, я не доволен этим, так как мне нужно скомпоновать его для разных перечислений, которые мне нужно использовать в picklists.
Есть ли у кого-нибудь предложение для более простого или более общего решения?
Спасибо Богдан