Привязка данных в клиенте Windows Presentation Foundation
Пример WPFDataBinding демонстрирует использование привязки данных в клиенте Windows Presentation Foundation (WPF). В примере используется служба Windows Communication Foundation (WCF), которая случайно создает массив альбомов для возврата клиенту. Каждый альбом имеет имя, цену и список дорожек в альбоме. Каждая дорожка в альбоме имеет имя и длительность. Сведения, возвращаемые службой, автоматически привязаны к пользовательскому интерфейсу, предоставленному клиентом Windows Presentation Foundation (WPF).
Примечание.
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.
Привязка данных позволяет автоматически привязывать источник данных к пользовательскому интерфейсу. Это упрощает модель программирования, устраняя необходимость программным способом обновлять каждый элемент пользовательского интерфейса данными из объекта данных или массива объектов данных. Можно как привязать объект к одному элементу пользовательского интерфейса, так и привязать массив к элементу управления, принимающему несколько входных объектов, такому как ListBox
. В следующем примере кода показана привязка данных к контексту данных (DataContext
) элемента пользовательского интерфейса.
// Event handler executed when call is complete
void client_GetAlbumListCompleted(object sender, GetAlbumListCompletedEventArgs e)
{
// This is on the UI thread, myPanel can be accessed directly
myPanel.DataContext = e.Result;
}
В предыдущем образце DataContext
для элемента макета grid
с именем myPanel
получает в качестве значения данные, возвращаемые методом GetAlbumList
. DataContext
позволяет элементам наследовать от своих родительских элементов информацию об источнике данных, используемом для привязки, а также другие характеристики привязки, например путь. Эта строка кода должна выполняться при каждом обновлении данных на сервере. Например, она выполняется при инициализации окна и при добавлении нового альбома.
В следующем примере XAML-кода для элемента ListBox
задано, что ItemsSource="{Binding }"
.
<ListBox
ItemTemplate="{StaticResource AlbumStyle}"
ItemsSource="{Binding }"
IsSynchronizedWithCurrentItem="true" />
Это указывает, что данные, привязываемые к элементу пользовательского интерфейса верхнего уровня, привязываются также к этому элементу управления (т. е. массиву альбомов). Кроме того, инструкция ItemTemplate="{StaticResource AlbumStyle}"
задает шаблон данных, который должен использоваться для каждого элемента в ListBox
. Можно также определять шаблоны данных для задания способа форматирования данных. Эти шаблоны данных можно использовать повторно - для других элементов пользовательского интерфейса в приложении, с тем преимуществом, что шаблон определяется и хранится в одном месте.
Шаблон данных AlbumStyle
создает сетку, состоящую из двух расположенных бок о бок элементов TextBlock
. В одном блоке текста указывается название альбома, а в другом количество дорожек в альбоме.
<DataTemplate x:Key="AlbumStyle">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="260" />
<ColumnDefinition Width="60" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextContent="{Binding Path=Title}" />
<TextBlock Grid.Column="1" TextContent="{Binding Path=Tracks#.Count}" HorizontalAlignment="Right" />
</Grid>
</DataTemplate>
Следующий XAML-код создает второй ListBox
.
<ListBox Grid.Row="2"
Grid.ColumnSpan="2"
ItemTemplate="{StaticResource TrackStyle}"
ItemsSource="{Binding Path=Tracks}" />
В коде задан путь к объекту ItemsSource
. Это означает, что данные, привязываемые к этому элементу управления, являются не данными верхнего уровня, а свойством данных верхнего уровня с именем Tracks
. Это свойство представляет собой массив дорожек, содержащихся в альбоме. Кроме того, задан другой шаблон данных DataTemplate
с именем TrackStyle
. Макет, создаваемый шаблоном TrackStyle
, аналогичен макету шаблона AlbumStyle
, однако элементы TextBlock
привязаны к другим свойствам. Это связано с тем, что шаблоны используются для разных объектов данных.
Настройка, сборка и выполнение образца
Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.
Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".