Databindning i en Windows Presentation Foundation-klient

WPFDataBinding-exemplet visar användningen av databindning i en WPF-klient (Windows Presentation Foundation). Exemplet använder en WCF-tjänst (Windows Communication Foundation) som slumpmässigt genererar en matris med album för att återgå till klienten. Varje album har ett namn, ett pris och en lista över albumspår. Albumspåren har ett namn och en varaktighet. Den information som returneras av tjänsten är automatiskt bunden till användargränssnittet (UI) som tillhandahålls av WPF-klienten (Windows Presentation Foundation).

Anmärkning

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Med databindning kan en datakälla automatiskt bindas till ett användargränssnitt. Detta förenklar programmeringsmodellen eftersom det inte kräver att du programmatiskt uppdaterar varje UI-element med data från ett dataobjekt eller en matris med dataobjekt. Du kan binda ett objekt till ett enda gränssnittselement eller en matris till en kontroll som tar flera indata, till exempel en ListBox. Följande kod visar hur du binder data till DataContext ett gränssnittselement.

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

I föregående exempel DataContext anges för grid layoutelementet med namnet myPanel till de data som returneras av GetAlbumList metoden. DataContext Tillåter element att ärva information från sina överordnade element om datakällan som används för bindning, samt andra egenskaper för bindningen, till exempel sökvägen. Kodraden måste köras varje gång data på servern uppdateras. Den körs till exempel när fönstret initieras och när ett nytt album läggs till.

I följande XAML-exempelkod anger ListBoxItemsSource="{Binding }".

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

Detta anger att data som är bundna till det översta användargränssnittselementet också är bundna till den här kontrollen (det vill: matrisen med album). Dessutom ItemTemplate="{StaticResource AlbumStyle}" anger datamallen som ska användas för varje objekt i ListBox. Du kan också definiera datamallar för att ange hur data ska formateras. Dessa datamallar kan återanvändas för andra gränssnittselement i programmet, fördelen är att datamallen definieras och underhålls på ett och samma ställe.

Datamallen AlbumStyle lägger ut ett rutnät med två TextBlocks sida vid sida. Den ena anger namnet på albumet och det andra antalet låtar i albumet.

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

Följande XAML-kod skapar en andra ListBox.

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

Koden anger en sökväg för ItemsSource. Detta indikerar att data som är bundna till den här kontrollen inte är data på den översta nivån, utan en egenskap för toppnivådata med namnet Tracks. Den här egenskapen representerar samlingen av spår som finns i albumet. Dessutom anges ett annat DataTemplate vid namn TrackStyle. Mallens TrackStyle layout liknar mallens AlbumStyle layout, men TextBlocks är bundna till olika egenskaper. Det beror på att de två mallarna används med olika dataobjekt.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört One-Time installationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.