Как показать свойство bool как Да / нет в сетке свойств?
Я знаю, что могу сделать это, написав пользовательские дескрипторы типов и т. д. однако, учитывая, насколько это простое требование; я упускаю простой способ сделать это.
возможность установить строку для "true" и "false" в BooleanConverter может быть всем, что мне нужно, но стандартный BooleanConverter, похоже, не позволяет вам устанавливать пользовательские строки.
2 ответов
вам придется настроить его. Вот так:
class YesNoConverter : BooleanConverter {
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) {
if (value is bool && destinationType == typeof(string)) {
return values[(bool)value ? 1 : 0];
}
return base.ConvertTo(context, culture, value, destinationType);
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
string txt = value as string;
if (values[0] == txt) return false;
if (values[1] == txt) return true;
return base.ConvertFrom(context, culture, value);
}
private string[] values = new string[] { "No", "Yes" };
}
пример использования:
class MyControl : Control {
[TypeConverter(typeof(YesNoConverter))]
public bool Prop { get; set; }
}
вы не получаете никакой помощи от системы.Глобализация, чтобы сделать эту работу на других языках.
вы можете избежать реализации пользовательского конвертера с помощью перечисления:
public enum YesNo{No,Yes}
...
[Browsable(true)]
public YesNo IsValueSet {get;set)
[Browsable(false)] //also consider excluding it from designer serialization
public bool ValueSetAsBool
{
get { return Convert.ToBoolean((byte)IsValueSet); }
set { IsValueSet = value ? YesNo.Yes : YesNo.No; }
}
как есть, это решение не локализуемо, и вам придется реализовать перечисление для каждой перестановки пар значений "Вкл/Выкл", которые вы хотите использовать. Но, это простой ответ для одноразового использования.