Silverlight绑定到布尔属性值的反转

job*_*lot 11 silverlight silverlight-3.0

我想将控件可见性绑定到布尔属性值的反转.我有一个属性CanDownload,如果是真的那么我想隐藏文本框,反之亦然.我怎样才能做到这一点?

谢谢

Ant*_*nes 42

这类问题是问这么频繁,答案等等类似我以为布尔它的时间有一个单一的答案全部(OK可"最")到值的转换问题.我在这里写了博客.

代码非常简单,所以我也将它粘贴在这里: -

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用单行创建转换器以实现可见性: -

public class BoolToVisibilityConverter : BoolToValueConverter<Visibility> { }
Run Code Online (Sandbox Code Playgroud)

那么你可以在这样的资源中创建一个实例转换器: -

<local:BoolToVisibilityConverter x:Key="InverseVisibility" TrueValue="Collapsed" FalseValue="Visible" />
Run Code Online (Sandbox Code Playgroud)

注意TrueValue并且FalseValue从更自然的顺序交换,为您提供所需的反转逻辑.有了这个在ResourcesUserControl甚至App.xaml中,你现在可以用它来绑定到CanDownload属性,TextBox Visibility属性: -

<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />
Run Code Online (Sandbox Code Playgroud)