TOC

This article has been localized into Ukrainian by the community.

Прив'язка даних:

Властивість StringFormat

Як ми бачили в попередніх статтях, для того, щоб впливати на вивід прив'язки даних, зазвичай, використовують конвертери. Їх перевагою є можливість конвертувати будь-які типи даних в будь-які інші. Проте, для простіших випадків, коли вам треба лише змінити формат візуалізації, а не тип даних, достатьно скористатися властивість StringFormat.

Використовуючи властивість StringFormat, ви втрачаєте частину гнучкості, яку надає використання конвертерів. Однак разом з тим, ви дуже сильно спрощуєте процес розробки, оскільки вам більше не потрібно створювати новий клас, а разом з ним і новий файл.

Властивість StringFormat робить саме те, що випливає з її назви. Вона форматує рядок виводу, просто, викликаючи метод String.Format. Інколи приклад говорить більше ніж тисяча слів, тож давайте поглянемо на нього:

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

Перші два елементи TextBlock беруть свої значення, прив'язуючи ширину та висоту батьківського вікна, Значення форматуються завдяки властивості StringFormat. Для ширини ми використовуємо спеціальний формат, а для висоти - грошовий формат. Значення зберігається у форматі double. Тож ми використовуємо ту саму специфікацію формату, що й при виклику double.ToString(). Ви можете знайтти їхній список тут: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx.

Крім того запам'ятайте, як можна включити специфічний текст в StringFormat - це дозволить вам додати будь-який текст на початку чи в кінці значення. При посиланні на фактичне значення всередині рядка формату, ми оточуємо його фігурними дужками, що містять два значення: посилання на значення, яке ми хочемо відформатувати (0 - це перший можливий номер значення) та рядок формату, розділені двокрапкою.

Останні два значення прив'язуються до поточної дати (DateTime.Now). Перший вивід - це власне дата, а другий - це час (години та хвилини). Тут можна прочитати більше про форматування DateTime : http://msdn.microsoft.com/en-us/library/az4se3k1.aspx.

Форматування без додаткового тексту

Запам'ятайте: якщо ви використовуєте формат рядка, що не містить жодного додаткового тексту, як от у всіх прикладах вище, то вам слід додати ще один набір фігурних дужок в XAML розмітку. Причина в тому, що інакше WPF може сплутати синтаксис із тим, який використовується для розширень розмітки. Ось приклад:

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

Використання специфічної культури

Якщо вам потрібно виводити прив'язану властивість по-різному, в залежності від культури, то це не проблема. Прив'язка використовує мову, вибрану для батьківського елемента, однак її можна задати безпосередньо для неї, використовуючи властивість ConverterCulture. Ось приклад:

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

Тут все дуже просто: завдяки поєднанню властивості StringFormat, яка використовує специфікатор D (шаблон довгого запису дати), та властивості ConverterCulture , ми можемо виводити прив'язані значення по-різному, в залежності від вибраної культури.

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!