This article has been localized into Danish by the community.
StringFormat egenskaben
Som vi så i de forrige afsnit, er måden at manipulere output af en binding før, det vises, typisk gennem brug af en konvertering. Det seje med konvertering er, at de tillader dig at konvertere enhver datatype til en komplet anden datatype. Men til mere simple scenarier, hvor du blot ønsker at ændre den måde, en bestemt værdi vises på og ikke nødvendigvis konvertere til en anden type, kan StringFormat egenskaben være nok.
Ved at bruge StringFormat egenskaben på en binding, mister du noget af den fleksibilitet, du får med en konvertering, men til gengæld er den meget simplere at bruge og kræver ikke oprettelse af en ny klasse i en ny fil.
StringFormat egenskaben gør nøjagtig, hvad navnet antyder: Den formatterer output-strengen ved at kalde String.Format metoden. Nogle gange siger et eksempel mere end tusind ord, så før jeg når så langt, kigger vi på et eksempel:
<Window x:Class="WpfTutorialSamples.DataBinding.StringFormatSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="StringFormatSample" Height="150" Width="250"
Name="wnd">
<StackPanel Margin="10">
<TextBlock Text="{Binding ElementName=wnd, Path=ActualWidth, StringFormat=Window width: {0:#,#.0}}" />
<TextBlock Text="{Binding ElementName=wnd, Path=ActualHeight, StringFormat=Window height: {0:C}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, StringFormat=Date: {0:dddd, MMMM dd}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, StringFormat=Time: {0:HH:mm}}" />
</StackPanel>
</Window>
De førte par TextBlock kontroller får deres værdi ved at binde til det overordnede Window og henter dets bredde og højde. Via StringFormat egenskaben bliver værdierne formatteret. Til bredden angiver vi en brugerdefineret format-streng, og for højden beder vi om at bruge valutaformat, bare for sjov. Værdien er gemt som en double type, så vi kan bruge alle de samme formatspecifikationer, som hvis vi lavede et kald til double.ToString(). Du kan finde en liste over dem her: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
Bemærk også, hvordan jeg kan medtage brugerdefineret tekst i StringFormat - det tillader dig at omkranse den bundne værdi med tekst efter dit ønske. Når den aktuelle værdi refereres i format-strengen, omkranser vi den med et sæt krøllede parenteser, som tager to værdier: En reference til værdien, vi vil formattere (værdi nummer 0, som er den først mulige værdi), samt format-strengen - adskilt af et kolon.
Til de sidste to værdi binder vi ganske enkelt til dags dato (DateTime.Now), og output er først som en dato i et specifikt format, og derefter tidspunkt (timer og minutter), igen via vores eget prædefinerede format. Du kan læse mere om DateTime formattering her: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx
Formattering uden ekstra tekst
Vær opmærksom på, at hvis du angiver en format-streng, som ikke indeholder noget brugerdefineret tekst som alle eksemplerne ovenfor, er du nødt til at have et ekstra sæt krøllede parenteser på definitionen i XAML. Grunden er, at WPF ellers blander syntaksen sammen med den syntaks, der bruges til Markup-udvidelser. Her er et eksempel:
<Window x:Class="WpfTutorialSamples.DataBinding.StringFormatSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="StringFormatSample" Height="150" Width="250"
Name="wnd">
<WrapPanel Margin="10">
<TextBlock Text="Width: " />
<TextBlock Text="{Binding ElementName=wnd, Path=ActualWidth, StringFormat={}{0:#,#.0}}" />
</WrapPanel>
</Window>
Brug af en specifik Culture
Har du brug for at vise en bundet værdi i overensstemmelse med en specifik kultur, er det ikke noget problem. Binding klasses vil bruge det sprog, der er angivet for det overordnede element, eller du kan angive det direkte i bindingen ved hjælp af ConverterCulture egenskaben. Her er et eksempel:
<Window x:Class="WpfTutorialSamples.DataBinding.StringFormatCultureSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="StringFormatCultureSample" Height="120" Width="300">
<StackPanel Margin="10">
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, ConverterCulture='de-DE', StringFormat=German date: {0:D}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, ConverterCulture='en-US', StringFormat=American date: {0:D}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, ConverterCulture='ja-JP', StringFormat=Japanese date: {0:D}}" />
</StackPanel>
</Window>
Det er ret simplet: Ved at kombinere StringFormat egenskaben, der bruger D specifikationen (Langt datoformat) og ConverterCulture egenskaben, kan vi vise den bundne værdier i overensstemmelse med en specifik kultur. Ret sejt!