Как показать свойство bool как Да | Нет в сетке свойств? - PullRequest
10 голосов
/ 12 января 2011

Я знаю, что могу сделать это, написав пользовательские дескрипторы типов и т. Д., Однако учитывая, насколько просто это требование;я упускаю простой способ сделать это.

Возможность установить строку для "true" и "false" в BooleanConverter - это все, что мне нужно, но стандартный BooleanConverter, похоже, не позволяет вам установитьпользовательские строки.

Ответы [ 2 ]

11 голосов
/ 12 января 2011

Вам придется настроить его.Например:

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; }
}

Вы не получаете помощи от System.Globalization, чтобы выполнить эту работу на других языках.

3 голосов
/ 12 января 2011

Вы можете избежать реализации пользовательского конвертера, используя перечисление:

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; }
}

Как таковое, это решение не локализуемо, и вам придется реализовывать перечисление для каждой перестановки пар «Вкл / Выкл», которые вы хотите использовать. Но это простой ответ для разовых.

...