xaml
Konwertery
Szukaj…
Parametry
| Parametr | Detale |
|---|---|
| wartość | Wartość do konwersji |
| targetType | Typ jest konwertowany na |
| parametr | Opcjonalna wartość kontrolująca działanie konwersji |
| kultura | Obiekt CultureInfo - wymagany, jeśli wymagana jest lokalizacja |
Uwagi
Metoda Convert konwertuje wartość ze źródła (zwykle model widoku) na cel (zwykle właściwość formantu).
Metoda ConvertBack konwertuje wartość z celu z powrotem na źródło. Jest to potrzebne tylko wtedy, gdy powiązanie to TwoWay lub OneWayToSource .
Gdy ConvertBack nie jest obsługiwany, tj. Nie ma mapowania jeden na jeden między wartością przed konwersją a wartością po konwersji, powszechną praktyką jest ConvertBack metodę ConvertBack DependencyProperty.UnsetValue . Jest to lepsza opcja niż zgłoszenie wyjątku (np. NotImplementedException ), ponieważ pozwala uniknąć nieoczekiwanych błędów w czasie wykonywania. Również powiązania mogą korzystać z ich FallbackValue gdy obiekt DependencyProperty.UnsetValue jest zwracany przez konwerter.
Ciąg do konwertera IsChecked
W XAML:
<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
Converter={StaticResource StringToIsCheckedConverter},
ConverterParameter=Male}"
Content="Male"/>
<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
Converter={StaticResource StringToIsCheckedConverter},
ConverterParameter=Female}"
Content="Female"/>
Klasa C #:
public class StringToIsCheckedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = (string)value;
string test = (string)parameter;
return input == test;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || !(value is bool))
{
return string.Empty;
}
if (parameter == null || !(parameter is string))
{
return string.Empty;
}
if ((bool)value)
{
return parameter.ToString();
}
else
{
return string.Empty;
}
}
}
Konwertery 101
Kontrolki XAML mogą mieć właściwości zależności, które można powiązać z obiektami z DataContext lub innych kontrolek. Gdy typ obiektu powiązanego jest inny niż typ docelowej właściwości DependencyProperty , można zastosować konwerter, aby dostosować jeden typ do drugiego.
Konwertery to klasy implementujące System.Windows.Data.IValueConverter lub System.Windows.Data.IMultiValueConverter ; WPF implementuje niektóre niestandardowe konwertery, ale programiści mogą zobaczyć zastosowanie w niestandardowych implementacjach, jak to często bywa.
Aby użyć konwertera w XAML, instancję można utworzyć w sekcji Resources . W poniższym przykładzie użyto System.Windows.Controls.BooleanToVisibilityConverter :
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
Zwróć uwagę na zdefiniowany element x:Key , który jest następnie używany w odniesieniu do wystąpienia BooleanToVisibilityConverter w powiązaniu:
<TextBlock Text="This will be hidden if property 'IsVisible' is true"
Visibility="{Binding IsVisible,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
W powyższym przykładzie wartość logiczna IsVisible jest konwertowana na wartość wyliczenia System.Windows.Visibility ; Visibility.Visible jeśli jest prawdą, lub Visibility.Collapsed . Visibility.Collapsed inny sposób.
Tworzenie i używanie konwertera: BooleanToVisibilityConverter i InvertibleBooleanToVisibilityConverter
Aby rozszerzyć i rozszerzyć doświadczenie wiązania, mamy konwertery do konwersji jednej wartości jednego typu na inną wartość innego typu. Aby wykorzystać konwertery w wiązaniu danych, najpierw musisz utworzyć klasę DataConverter, która rozszerza oba
-
IValueConverter(WPF i UWP)
lub
-
IMultiValueConverter(WPF)
jeśli chcesz przekonwertować wiele typów na jeden typ
W tym przypadku skupiamy się na przekształceniu wartości boolean True/False na odpowiadające Widoczności Visibility.Visible i Visibility.Collapsed Podsumowano:
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 metoda jest wywoływana przy każdym GET dane FROM w ViewModel .
ConvertBack jest wezwany SET ing danych TO z ViewModel dla BindingMode.TwoWay wiązań.
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);
}
}
Jeśli chcesz użyć konwertera w Binding , po prostu zadeklaruj go jako zasób na swojej stronie, w oknie lub innym elemencie, podaj mu klucz i podaj potencjalnie potrzebne właściwości:
<Page ...
xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
<converters:InvertibleBooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
Invert="False" />
</Page.Resources>
i użyj go jako StaticResource w powiązaniu:
<ProgressRing
Visibility="{Binding ShowBusyIndicator,
Converter={StaticResource BooleanToVisibilityConverter},
UpdateSourceTrigger=PropertyChanged,
Mode=OneWay}" />