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