Привязка данных в клиенте 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 значение gridmyPanel устанавливается на данные, возвращаемые методом GetAlbumList. Элементы DataContext могут наследовать сведения от родительских элементов о источнике данных, используемом для привязки, а также других характеристик привязки, таких как путь. Строка кода должна выполняться каждый раз при обновлении данных на сервере. Например, он выполняется при инициализации окна и при добавлении нового альбома.

В следующем примере кода ListBox XAML указывается 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 привязаны к разным свойствам. Это связано с тем, что два шаблона используются с разными объектами данных.

Настройка, сборка и запуск примера

  1. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  2. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  3. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.