TOC

This article has been localized into Swedish by the community.

Databindning:

Egenskapen StringFormat

Som vi såg i förra kapitlet görs manipulationer av utgångsvärdet från en bindning i typiska fall av en omvandlare innan det presenteras. Det coola med omvandlare är att de möjliggör omvandling av en godtycklig datatyp till en helt annan datatyp. I enklare scenarion, där du bara vill ändra hur ett visst värde visas utan att ändra dess typ, kan egenskapen StringFormat duga bra.

Genom att använda egenskapen ”StringFormat” för en bindning förlorar du en del flexibilitet jämfört med en omvandlare, men i gengäld blir det mycket enklare och du behöver inte skapa en ny klass.

Egenskapen ”StringFormat” gör precis vad namnet antyder: Den formaterar utgångssträngen genom att anropa metoden ”String.Format”. Ibland säger ett exempel mer än tusen ord, så låt oss dyka rakt in i ett exempel:

<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örsta två textblocken får sina värden genom bindning till dess överordnade fönster som tillhandahåller sina bredd- och höjdvärden. Egenskapen ”StringFormat” formaterar dessa värden. För bredden anger vi ett eget strängformat medan vi skojar till det lite och använder ett valutaformat för höjden. Värdet sparas som ett värde av typen ”double” så vi kan använda samma formatspecifikation som om vi hade anropat ”double.ToString()”. En lista på formatsträngar finns här: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

Notera också hur vi kan inkludera egen text i ”StringFormat” - detta ger oss möjligheten att presentera resultatet på det sätt vi vill. När vi vill referera till det faktiska värdet inne i formatsträngen noterar vi detta med en klammerparentes som innehåller två värden: en referens till värdet vi vill formatera (värdet ”0” eftersom detta är det första möjliga värdet) och formatsträngen efter ett kolon-tecken.

De sista två textblocken binder vi för enkelhetens skull till dagens datum (”DateTime.Now”) och presenterar resultatet dels som datum, dels som tid (timmar och minuter), även här använder vi egen text vid presentationen.Du kan läsa mer om formatering av datum och tid här: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

Formatering utan extra text

Observera att om du specificerar en formatsträng utan egen text, som i exemplen ovan, då måste lägga till en extra klammerparentes i din XAML-kod. Anledningen är att WPF annars kan blanda ihop syntaxen med den man använder för ”MarkupExtension”. Här kommer ett exempel:

<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>

Använda nationella konventioner

Om du behöver presentera ett bundet värde i enlighet med en specifik nationell konvention, inga problem. Bindningen kommer att använda inställningarna som specificerats för överordnade element, alternativt kan du specificera dem direkt i bindningen genom att använda egenskapen ”ConverterCulture”. Här kommer ett exempel:

<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 är ganska enkelt: Genom att kombinera egenskaperna ”StringFormat”, som använder ”D”-specificeraren (långt datummönster), och ”ConverterCulture”, kan vi presentera bundna värden i enlighet med en specificerad nationell konvention. Är det inte tjusigt?


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!