Udostępnij za pośrednictwem


Wiązanie danych w kliencie WPF (Windows Presentation Foundation)

W przykładzie WPFDataBinding pokazano użycie powiązania danych w kliencie programu Windows Presentation Foundation (WPF). W przykładzie użyto usługi Windows Communication Foundation (WCF), która losowo generuje tablicę albumów, aby powrócić do klienta. Każdy album ma nazwę, cenę i listę utworów albumu. Utwory albumu mają nazwę i czas trwania. Informacje zwracane przez usługę są automatycznie powiązane z interfejsem użytkownika udostępnianym przez klienta programu Windows Presentation Foundation (WPF).

Uwaga

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

Powiązanie danych umożliwia automatyczne powiązanie źródła danych z interfejsem użytkownika. Upraszcza to model programowania, ponieważ nie wymaga programowego aktualizowania każdego elementu interfejsu użytkownika przy użyciu danych z obiektu danych lub tablicy obiektów danych. Obiekt można powiązać z pojedynczym elementem interfejsu użytkownika lub tablicą z kontrolką, która przyjmuje wiele danych wejściowych, takich jak ListBox. Poniższy kod pokazuje, jak powiązać dane z DataContext elementem interfejsu użytkownika.

// 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;
}

W poprzednim przykładzie DataContext element układu grid o nazwie myPanel jest ustawiony na dane zwrócone przez metodę GetAlbumList . Element DataContext umożliwia dziedziczenie informacji z elementów nadrzędnych dotyczących źródła danych używanego do powiązania, a także innych cech powiązania, takich jak ścieżka. Wiersz kodu musi być wykonywany za każdym razem, gdy dane na serwerze są aktualizowane. Na przykład jest wykonywany po zainicjowaniu okna i dodaniu nowego albumu.

W poniższym przykładowym kodzie ListBox XAML określa ItemsSource="{Binding }"wartość .

<ListBox
          ItemTemplate="{StaticResource AlbumStyle}"
          ItemsSource="{Binding }"
          IsSynchronizedWithCurrentItem="true" />

Określa to, że dane powiązane z elementem interfejsu użytkownika najwyższego poziomu są również powiązane z tą kontrolką (czyli tablicą albumów). Ponadto określa szablon danych, ItemTemplate="{StaticResource AlbumStyle}" który ma być używany dla każdego elementu w elemencie ListBox. Można również zdefiniować szablony danych, aby określić sposób formatowania danych. Te szablony danych można używać ponownie w przypadku innych elementów interfejsu użytkownika w aplikacji. Zaletą jest to, że szablon danych jest zdefiniowany i utrzymywany w jednym miejscu.

Szablon AlbumStyle danych przedstawia siatkę z dwoma TextBlockobok siebie. Jeden określa nazwę albumu i drugą liczbę utworów w albumie.

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

Poniższy kod XAML tworzy drugi ListBoxkod .

<ListBox Grid.Row="2"
            Grid.ColumnSpan="2"
            ItemTemplate="{StaticResource TrackStyle}"
            ItemsSource="{Binding Path=Tracks}" />

Kod określa ścieżkę dla elementu ItemsSource. Oznacza to, że dane powiązane z tą kontrolką nie są danymi najwyższego poziomu, ale właściwością danych najwyższego poziomu o nazwie Tracks. Ta właściwość reprezentuje tablicę utworów zawartych w albumie. Ponadto określono inną DataTemplate nazwę TrackStyle . Układ szablonu TrackStyle jest podobny do tego szablonu AlbumStyle , ale TextBlocks są powiązane z różnymi właściwościami. Dzieje się tak, ponieważ dwa szablony są używane z różnymi obiektami danych.

Aby skonfigurować, skompilować i uruchomić przykład

  1. Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.

  2. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  3. Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.