WPF: отобразить значение bool как «Да» / «Нет»

У меня есть значение bool, которое мне нужно отображать как «Да» или «Нет» в TextBlock. Я пытаюсь сделать это с помощью StringFormat, но мой StringFormat игнорируется, а TextBlock отображает «True» или «False».

 

Что-то не так с моим синтаксисом, или этот тип StringFormat не поддерживается?

Я знаю, что могу использовать ValueConverter для этого, но решение StringFormat кажется более элегантным (если оно сработало).

Ваше решение с StringFormat не может работать, потому что это не допустимая строка формата.

Я написал расширение разметки, которое будет делать то, что вы хотите. Вы можете использовать его так:

  

Здесь код расширения разметки:

 public class SwitchBindingExtension : Binding { public SwitchBindingExtension() { Initialize(); } public SwitchBindingExtension(string path) : base(path) { Initialize(); } public SwitchBindingExtension(string path, object valueIfTrue, object valueIfFalse) : base(path) { Initialize(); this.ValueIfTrue = valueIfTrue; this.ValueIfFalse = valueIfFalse; } private void Initialize() { this.ValueIfTrue = Binding.DoNothing; this.ValueIfFalse = Binding.DoNothing; this.Converter = new SwitchConverter(this); } [ConstructorArgument("valueIfTrue")] public object ValueIfTrue { get; set; } [ConstructorArgument("valueIfFalse")] public object ValueIfFalse { get; set; } private class SwitchConverter : IValueConverter { public SwitchConverter(SwitchBindingExtension switchExtension) { _switch = switchExtension; } private SwitchBindingExtension _switch; #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { try { bool b = System.Convert.ToBoolean(value); return b ? _switch.ValueIfTrue : _switch.ValueIfFalse; } catch { return DependencyProperty.UnsetValue; } } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return Binding.DoNothing; } #endregion } } 

Вы также можете использовать этот отличный конвертер значений

Затем вы объявляете в XAML что-то вроде этого:

  

И вы можете использовать его так:

  

Без конвертера

     

Существует также еще один отличный вариант. Проверьте это: Alex141 CalcBinding .

В моем DataGrid у меня есть только:

  

Чтобы использовать его, вам нужно только добавить CalcBinding через GitHub, чем в объявлении UserControl / Windows, вы добавляете

  

Это решение, использующее Converter и ConverterParameter который позволяет вам легко определять разные strings для разных Bindings :

 public class BoolToStringConverter : IValueConverter { public char Separator { get; set; } = ';'; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var strings = ((string)parameter).Split(Separator); var trueString = strings[0]; var falseString = strings[1]; var boolValue = (bool)value; if (boolValue == true) { return trueString; } else { return falseString; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { var strings = ((string)parameter).Split(Separator); var trueString = strings[0]; var falseString = strings[1]; var stringValue = (string)value; if (stringValue == trueString) { return true; } else { return false; } } } 

Определите конвертер следующим образом:

  

И используйте его вот так:

  

Если вам нужен другой разделитель, чем ; (например . ), определите вместо этого конвертер:

  

Это еще один альтернативный упрощенный преобразователь с «жестко закодированным» значением Да / Нет

 [ValueConversion(typeof (bool), typeof (bool))] public class YesNoBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var boolValue = value is bool && (bool) value; return boolValue ? "Yes" : "No"; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value != null && value.ToString() == "Yes"; } } 

Использование XAML

  

Следующее работало для меня внутри datagridtextcolumn: я добавил другое свойство в свой class, который возвращал строку в зависимости от значения MyBool. Обратите внимание, что в моем случае datagrid был связан с объектом CollectionViewSource объектов MyClass.

C #:

 public class MyClass { public bool MyBool {get; set;} public string BoolString { get { return MyBool == true ? "Yes" : "No"; } } } 

XAML:

  
Interesting Posts

Entity Framework Code First: Как я могу создать связь «один-ко-многим» и «один-к-одному» между двумя таблицами?

Bash – каталоги, заканчивающиеся на. И пробелы не могут быть удалены

как использовать okhttp для загрузки файла?

Чтение ввода в bash внутри цикла while

SSD больше не загружается

Как реализовать прокрутку между вкладками на Android?

Как обрабатывать необработанные UDP-пакеты, чтобы их можно было декодировать с помощью фильтра декодера в прямом источнике фильтра источника

Отправьте файл через HTTP POST с помощью C #

Как скопировать список?

Печать от 1 до 1000 без цикла или условных обозначений

Использование JFreeChart для отображения последних изменений во временном ряду

Содержимое стиля кнопки отображается только в одном экземпляре Button

Как установить значение составного поля переменных с помощью динамического SQL

Как избежать строки для использования в Boost Regex

Как запустить EXE-файл в PowerShell с параметрами с пробелами и кавычками

Давайте будем гением компьютера.