xaml
omvandlare
Sök…
parametrar
| Parameter | detaljer |
|---|---|
| värde | Värdet att konvertera från |
| targetType | Typen som konverteras till |
| parameter | Valfritt värde för att kontrollera hur konverteringen fungerar |
| kultur | CultureInfo-objekt - krävs om lokalisering behövs |
Anmärkningar
Metoden Convert konverterar värdet från källan (vanligtvis visningsmodellen) till målet (vanligtvis en egenskap hos en kontroll).
Metoden ConvertBack konverterar värdet från målet tillbaka till källan. Det behövs endast om bindningen är TwoWay eller OneWayToSource .
När en ConvertBack inte stöds, dvs det finns ingen en-till-en-mappning mellan förkonverteringsvärdet och post-konverteringsvärdet, är det vanligt att ConvertBack metoden returnerar DependencyProperty.UnsetValue . Det är ett bättre alternativ än att kasta ett undantag (t.ex. NotImplementedException ) eftersom det undviker oväntade runtime-fel. Bindningar kan också dra nytta av deras FallbackValue när DependencyProperty.UnsetValue returneras av en omvandlare.
Sträng till IsChecked Converter
I 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"/>
C # klassen:
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;
}
}
}
Omvandlare 101
XAML-kontroller kan ha beroendeegenskaper som kan bindas till objekt från DataContext eller andra kontroller. När typen av objekt som binds skiljer sig från typen av målet DependencyProperty , kan en omvandlare användas för att anpassa en typ till en annan.
Konverterare är klasser som implementerar System.Windows.Data.IValueConverter eller System.Windows.Data.IMultiValueConverter ; WPF implementerar vissa konverterare utanför boxen, men utvecklare kan se användning i anpassade implementationer, som det ofta är fallet.
För att använda en omvandlare i XAML kan en instans instanseras i Resources . För exemplet nedan kommer System.Windows.Controls.BooleanToVisibilityConverter att användas:
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
Lägg märke till den definierade x:Key nyckelelementet, som sedan används för att referera till förekomsten av BooleanToVisibilityConverter i bindningen:
<TextBlock Text="This will be hidden if property 'IsVisible' is true"
Visibility="{Binding IsVisible,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
I exemplet ovan konverteras en boolesk IsVisible egenskap till ett värde på System.Windows.Visibility uppräkning; Visibility.Visible om sant eller Visibility.Collapsed sätt.
Skapa och använda en omvandlare: BooleanToVisibilityConverter och InvertibleBooleanToVisibilityConverter
För att utvidga och utvidga den bindande upplevelsen har vi omvandlare att konvertera en ett värde av en typ till ett annat värde av en annan typ. För att utnyttja omvandlare i en databasning måste du först skapa en DataConverter-klass som sträcker sig antingen
-
IValueConverter(WPF & UWP)
eller
-
IMultiValueConverter(WPF)
om du vill konvertera flera typer till en typ
I det här fallet fokuserar vi på att omvandla en boolean True/False värde för correspionding sikt Visibility.Visible och 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 kallas varje gång du GET data FROM ViewModel .
Den ConvertBack uppmanas SET ing uppgifter TO den ViewModel för BindingMode.TwoWay bindningar.
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);
}
}
Om du vill använda en omvandlare i en Binding , förklara den helt enkelt som en resurs i din sida, fönster eller annat element, ge den en nyckel och leverera potentiellt nödvändiga egenskaper:
<Page ...
xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
<converters:InvertibleBooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
Invert="False" />
</Page.Resources>
och använda den som en StaticResource i en bindande:
<ProgressRing
Visibility="{Binding ShowBusyIndicator,
Converter={StaticResource BooleanToVisibilityConverter},
UpdateSourceTrigger=PropertyChanged,
Mode=OneWay}" />