创建和使用 Converter BooleanToVisibilityConverter 和 InvertibleBooleanToVisibilityConverter

为了扩展和扩展绑定体验,我们有转换器将一个类型的值转换为另一个类型的另一个值。要在数据绑定中利用转换器,首先需要创建一个扩展的 DataConverter 类

  • IValueConverter (WPF 和 UWP)

要么

  • IMultiValueConverter (WPF)

如果你想将多种类型转换成一种类型
在这种情况下,我们专注于将 boolean True/False 值转换为相应的 Visibilities Visibility.VisibleVisibility.Collapsed

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value is bool && (bool) value) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return (value is Visibility && (Visibility) value == Visibility.Visible);
    }
}

Convert 只要你方法被称为 GET 数据 FROMViewModel
ConvertBack 被要求 SET ING 数据 TOViewModelBindingMode.TwoWay 绑定。

当然,你也可以使用转换器中的属性。看看这一个:

public class InvertibleBooleanToVisibilityConverter : IValueConverter
{
    public bool Invert { get; set; } = false;

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value is bool && (bool) value != Invert) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return (value is Visibility && ((Visibility) value == Visibility.Visible) != Invert);
    }
}

如果你想在 Binding 中使用转换器,只需将其声明为页面,窗口或其他元素中的资源,为其提供密钥并提供可能需要的属性:

<Page ...
    xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
    <converters:InvertibleBooleanToVisibilityConverter 
        x:Key="BooleanToVisibilityConverter" 
        Invert="False" />
</Page.Resources>

并将其用作绑定中的 StaticResource

<ProgressRing 
        Visibility="{Binding ShowBusyIndicator, 
            Converter={StaticResource BooleanToVisibilityConverter},
            UpdateSourceTrigger=PropertyChanged,
            Mode=OneWay}" />