建立和使用 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}" />