创建和使用 Converter BooleanToVisibilityConverter 和 InvertibleBooleanToVisibilityConverter
为了扩展和扩展绑定体验,我们有转换器将一个类型的值转换为另一个类型的另一个值。要在数据绑定中利用转换器,首先需要创建一个扩展的 DataConverter 类
IValueConverter(WPF 和 UWP)
要么
IMultiValueConverter(WPF)
如果你想将多种类型转换成一种类型
在这种情况下,我们专注于将 boolean True/False 值转换为相应的 Visibilities Visibility.Visible 和 Visibility.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 数据 FROM 的 ViewModel 。
该 ConvertBack 被要求 SET ING 数据 TO 的 ViewModel 为 BindingMode.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}" />