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