Такого рода вопросы задаются так часто, а ответы так похожи. Я думал, что пришло время получить один ответ на все (хорошо, может быть, «большинство») из вопросы преобразования стоимости. Я написал это здесь .
Код довольно прост, поэтому я тоже вставлю его: -
public class BoolToValueConverter<T> : IValueConverter
{
public T FalseValue { get; set; }
public T TrueValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return FalseValue;
else
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.Equals(TrueValue) : false;
}
}
Теперь вы можете создать конвертер для видимости с помощью одной строки: -
public class BoolToVisibilityConverter : BoolToValueConverter<Visibility> { }
Тогда вы можете создать конвертер экземпляров в таком ресурсе: -
<local:BoolToVisibilityConverter x:Key="InverseVisibility" TrueValue="Collapsed" FalseValue="Visible" />
Обратите внимание, что TrueValue
и FalseValue
поменялись местами из более естественного порядка, давая вам инвертированную логику, которую вы хотели. Теперь вы можете использовать его в Resources
в вашем UserControl
или даже в App.xaml для привязки к свойству CanDownload
к свойству TextBox
Visibility
: -
<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />