В текущем примере вывод будет идентичным. С учетом этого вполне вероятно вас интересует, в каких случаях необходимо устанавливать свойство
DataContext
явно.
Поступать так может быть удобно из-за того, что подэлементы способны наследовать свои значения в дереве разметки.
Подобным образом можно легко устанавливать один и тот же источник данных для семейства элементов управления, не повторяя избыточные фрагменты XAML-разметки
"{Binding ElementName=X, Path=Y}"
во множестве элементов управления. Например, пусть в панель
StackPanel
вкладки добавлен новый элемент
Button
(вскоре вы увидите, почему он имеет настолько большой размер):
<Button Content="Click" Height="200"/>
Чтобы сгенерировать привязки данных для множества элементов управления, вы могли бы применить Visual Studio, но взамен введите модифицированную разметку в редакторе XAML:
<!-- Обратите внимание, что StackPanel устанавливает
свойство DataContext -->
<StackPanel Background="#FFE5E5E5"
DataContext = "{Binding ElementName=mySB}">
...
<!-- Теперь оба элемента пользовательского интерфейса работают
со значением линейки прокрутки уникальными путями -->
Если в спецификаторе формата отсутствует какой-либо текст, тогда его понадобится предварить пустым набором фигурных скобок, который является управляющей последовательностью для XAML. Такой прием уведомляет процессор о том, что следующие за
{}
символы представляют собой литералы, а не, скажем, конструкцию привязки. Вот обновленная разметка XAML:
можно добавлять прямо в конструкции привязки. Она должна быть отдельной только для свойств
Content
.
Преобразование данных с использованием интерфейса IValueConverter
Если требуется нечто большее, чем просто форматирование данных, тогда можно создать специальный класс, реализующий интерфейс
IValueCVonverter
из пространства имен
System.Windows.Data
. В интерфейсе
IValueCVonverter
определены два члена, позволяющие выполнять преобразование между источником и целью (в случае двунаправленной привязки). После определения такой класс можно применять для дальнейшего уточнения процесса привязки данных.
Вместо использования свойства форматирования можно применять преобразователь значений для отображения целых чисел внутри элемента управления
Label
. Добавьте в проект новый класс (по имени
MyDoubleConverter
) со следующим кодом:
using System;
using System.Windows.Data;
namespace WpfControlsAndAPIs
{
public class MyDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
// Преобразовать значение double в int.
double v = (double)value;
return (int)v;
}
public object ConvertBack(object value, Type targetType, object parameter,