xaml
converters
Zoeken…
parameters
| Parameter | Details |
|---|---|
| waarde | De waarde om van te converteren |
| TargetType | Het type dat wordt geconverteerd naar |
| parameter | Optionele waarde om te bepalen hoe de conversie werkt |
| cultuur | CultureInfo-object - vereist als lokalisatie nodig is |
Opmerkingen
De Convert methode converteert de waarde van de bron (meestal het weergavemodel) naar het doel (meestal een eigenschap van een besturingselement).
De methode ConvertBack converteert de waarde van het doel terug naar de bron. Het is alleen nodig als de binding TwoWay of OneWayToSource .
Wanneer een ConvertBack niet wordt ondersteund, dat wil zeggen dat er geen een-op-een toewijzing is tussen de pre-conversiewaarde en de post-conversiewaarde, is het gebruikelijk dat de ConvertBack methode DependencyProperty.UnsetValue retourneert. Het is een betere optie dan een uitzondering te gooien (bijv. NotImplementedException ) omdat het onverwachte runtime-fouten voorkomt. Bindingen kunnen ook profiteren van hun FallbackValue wanneer DependencyProperty.UnsetValue wordt geretourneerd door een converter.
String naar IsChecked Converter
In 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"/>
De C # klasse:
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;
}
}
}
Converters 101
XAML-besturingselementen kunnen afhankelijkheidseigenschappen hebben die kunnen worden gebonden aan objecten uit DataContext of andere besturingselementen. Wanneer het type van het te binden object verschilt van het type van het doel DependencyProperty , kan een converter worden gebruikt om het ene type aan het andere aan te passen.
Converters zijn klassen die System.Windows.Data.IValueConverter of System.Windows.Data.IMultiValueConverter implementeren; WPF implementeert een aantal kant-en-klare converters, maar ontwikkelaars kunnen het gebruik in aangepaste implementaties zien, zoals vaak het geval is.
Als u een conversieprogramma in XAML wilt gebruiken, kan een exemplaar worden geïnstantieerd in het gedeelte Resources . Voor het onderstaande voorbeeld wordt System.Windows.Controls.BooleanToVisibilityConverter gebruikt:
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
Let op het gedefinieerde x:Key element, dat vervolgens wordt gebruikt om te verwijzen naar het exemplaar van BooleanToVisibilityConverter in de binding:
<TextBlock Text="This will be hidden if property 'IsVisible' is true"
Visibility="{Binding IsVisible,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
In het bovenstaande voorbeeld wordt een booleaanse IsVisible eigenschap geconverteerd naar een waarde van de System.Windows.Visibility opsomming; Visibility.Visible . Visibility.Visible indien waar of Visibility.Collapsed Anders Visibility.Collapsed .
Een converter maken en gebruiken: BooleanToVisibilityConverter en InvertibleBooleanToVisibilityConverter
Om de bindende ervaring uit te breiden en uit te breiden hebben we converters om een waarde van het ene type om te zetten in een andere waarde van een ander type. Om Converters in een databinding te gebruiken, moet u eerst een DataConverter-klasse maken die ook wordt uitgebreid
-
IValueConverter(WPF & UWP)
of
-
IMultiValueConverter(WPF)
als u meerdere typen naar één type wilt converteren
In dit geval richten we ons op het converteren van een boolean True/False waarde boolean True/False naar de overeenkomstige Zichtbaarheid Visibility.Visible en Visibility.Collapsed Samengevouwen:
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);
}
}
De Convert methode heet wanneer u GET data FROM de ViewModel .
De ConvertBack wordt een beroep gedaan op SET ing gegevens TO de ViewModel voor BindingMode.TwoWay bindingen.
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);
}
}
Als u een converter in een Binding wilt gebruiken, geeft u deze gewoon aan als bron op uw pagina, venster of ander element, geeft u deze een sleutel en levert u mogelijk benodigde eigenschappen:
<Page ...
xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
<converters:InvertibleBooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
Invert="False" />
</Page.Resources>
en gebruik het als een StaticResource in een binding:
<ProgressRing
Visibility="{Binding ShowBusyIndicator,
Converter={StaticResource BooleanToVisibilityConverter},
UpdateSourceTrigger=PropertyChanged,
Mode=OneWay}" />