被问到这样的问题so经常和答案so类似我认为是时候对所有(好吧可能是“大多数”)布尔值转换问题有一个单一的答案了。我已经写博客了here https://web.archive.org/web/20200627025931/http://geekswithblogs.net:80/codingbloke/archive/2010/05/28/a-generic-boolean-value-converter.aspx.
代码非常简单,所以我也将其粘贴到这里:-
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
and FalseValue
是从更自然的顺序进行交换,为您提供所需的反转逻辑。有了这个在Resources
在你的UserControl
甚至 App.xaml,您现在可以使用它来绑定CanDownload
财产给TextBox
Visibility
财产:-
<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />