TOC

This article is currently in the process of being translated into Croatian (~99% done).

Data binding:

The StringFormat property

Kao što smo vidjeli u prethodnim poglavljima, način za manipulaciju vrijednosti iz poveznice prije nego što se prikaže obično je putem konvertera. Sjajna stvar kod konverteraje što vam omogućuju pretvaranje bilo kojeg tipa podataka u potpuno drugačiji tip podataka. Međutim, za jednostavnije scenarije, gdje samo želite promijeniti način prikazivanja određene vrijednosti, a ne nužno ju pretvoriti u drugi tip, svojstvo StringFormat moglo bi biti sasvim dovoljno.

Korištenjem StringFormat svojstva poveznice, gubite nešto na fleksibilnosti koju dobijete kada koristite konverter, ali je mnogo jednostavnije za koristiti i nije potrebno kreirati novu klasu.

StringFormat svojstvo radi upravo ono što mu ime govori: formatira izlazni string jednostavnim pozivom String.Format metode. Ponekad primjer govori više od tisuću riječi, pa prije no što okinem brojač riječi, skočimo na primjer:

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

Prva dva TextBlocka dobivaju svoju vrijednost vezivanjem na roditeljski Window i uzimajući njegovu širinu i visinu. Kroz svojstvo StringFormat, vrijednosti se formatiraju. Za širinu, specificiramo prilagođeni string, dok za visinu koristimo format valute, samo za zabavu. Vrijednost se sprema kao tip double, tako da možemo koristiti sve iste specifikatore kao da smo pozvali double.ToString(). Popis tih specifikatora možete pronaći ovdje: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx"

Također primijetite kako sam uključio proizvoljni tekst u StringFormat - to omogućava da prije ili poslije povezane vrijednosti dodate tekst po želji. Kada referenciramo stvarnu vrijednost unutar format stringa, okružujemo ju s vitičastim zagradama koje sadrže dvije vrijednosti: Referencu na vrijednost koju želimo formatirati (0 koja predstavlja prvu moguću vrijednost) i format string odvojen dvotočkom.

Zadnje dvije vrijednosti jednostavno vežemo za trenutni datum (DateTime.Now) i prvu ispisujemo kao datum u specifičnom formatu, a nakon toga kao vrijeme (sati i minute), ponovno koristeći naš vlastiti pre-definirani format. Ovdje možete pročitati više o DateTime formatiranju: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

Formatiranje bez dodatnog teksta

Molim vas obratite pažnju da ako specificirate format string koji ne uključuje vlastiti proizvoljni tekst, a što svi gornji primjeri čine, onda morate dodati još jedan dodatni par vitičastih zagrada za definiranje unutar XAML-a. Razlog tome je što bi WPF mogao pobrkati sintaksu sa sintaksom koja se koristi za Markup Extensions. Evo primjera:

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

Korištenje specifične kulture

Ako trebate prikazati vezanu vrijednost u skladu s određenom kulturom, to nije problem. Veza će koristiti jezik koji je specificiran za roditeljski element, ili ga možete izravno specificirati za vezu koristeći svojstvo ConverterCulture. Evo primjera:

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

Poprilično je jednostavno: kombiniranjem StringFormat svojstva koje koristi specifikator D (obrazac za dugi prikaz datuma) i ConverterCulture svojstva, možemo ispisati povezanu vrijednost u skladu sa specifičnom kulturom. Prilično pametno!


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!