Datenbindung in einem Windows Presentation Foundation-ClientData Binding in a Windows Presentation Foundation Client

In diesem Beispiel wird die Verwendung der Datenbindung in einem Windows Presentation Foundation (WPF)-Client veranschaulicht.This sample demonstrates the use of data binding in a Windows Presentation Foundation (WPF) client. Das Beispiel verwendet einen Windows Communication Foundation (WCF)-Dienst, der ein Array von Alben zurückzugebenden an den Client nach dem Zufallsprinzip generiert.The sample uses a Windows Communication Foundation (WCF) service that randomly generates an array of albums to return to the client. Jedes Album hat einen Namen, einen Preis und eine Liste von Albumtiteln.Each album has a name, a price, and a list of album tracks. Die Albumtitel haben einen Namen und eine Dauer.The album tracks have a name and duration. Die Informationen, die vom Dienst zurückgegeben wird, wird automatisch für die Benutzeroberfläche (UI) von der Windows Presentation Foundation (WPF)-Client bereitgestellt gebunden.The information that is returned by the service is automatically bound to the user interface (UI) provided by the Windows Presentation Foundation (WPF) client.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Durch die Datenbindung kann eine Datenquelle automatisch an eine Benutzeroberfläche gebunden werden.Data binding allows a data source to be automatically bound to a UI. Dadurch wird das Programmiermodell vereinfacht, da Sie nicht jedes Element der Benutzeroberfläche programmgesteuert mit den Daten aus einem Datenobjekt oder einem Array von Datenobjekten aktualisieren müssen.This simplifies the programming model because it does not require that you programmatically update each UI element with the data from a data object or an array of data objects. Sie können ein Objekt an ein Benutzeroberflächenelement oder ein Array an ein Steuerelement mit mehreren Eingaben binden, beispielsweise ListBox.You can bind an object to a single UI element or an array to a control that takes multiple inputs, such as a ListBox. Im folgenden Codebeispiel wird das Binden von Daten an den DataContext eines Benutzeroberflächenelements veranschaulicht.The following code shows how to bind data to the DataContext of a UI element.

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

Im obigen Beispiel wird der DataContext für das grid-Layoutelement myPanel auf die von der GetAlbumList-Methode zurückgegebenen Daten festgelegt.In the previous sample, the DataContext for the grid layout element named myPanel is set to the data returned by the GetAlbumList method. Durch den DataContext können Elemente Informationen zu der für die Bindung verwendete Datenquelle sowie andere Merkmale der Bindung (beispielsweise den Pfad) von den übergeordneten Elementen erben.The DataContext allows elements to inherit information from their parent elements about the data source that is used for binding, as well as other characteristics of the binding such as the path. Die Codezeile muss jedes Mal ausgeführt werden, wenn die Daten auf dem Server aktualisiert werden.The line of code must be executed every time the data on the server is updated. Sie wird beispielsweise ausgeführt, wenn das Fenster initialisiert wird und wenn ein neues Album hinzugefügt wird.For example, it is executed when the window is initialized and when a new album is added.

Im folgenden XAML-Beispielcode wird ListBox von ItemsSource="{Binding }" angegeben.In the following sample XAML code, the ListBox specifies ItemsSource="{Binding }".

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

Dies gibt an, dass die an das Benutzeroberflächenelement der obersten Ebene gebundenen Daten auch an dieses Steuerelement gebunden werden (d. h. an das Array von Alben).This specifies that the data bound to the top-level UI element is also bound to this control (that is, the array of Albums). Außerdem gibt ItemTemplate="{StaticResource AlbumStyle}" die Datenvorlage an, die in ListBox für jedes Element verwendet werden soll.In addition, ItemTemplate="{StaticResource AlbumStyle}" specifies the data template to be used for each item in the ListBox. Sie können auch Datenvorlagen definieren, um anzugeben, wie die Daten formatiert werden sollen.You can also define data templates to specify how the data should be formatted. Diese Datenvorlagen können für andere Benutzeroberflächenelemente in der Anwendung wiederverwendet werden. Der Vorteil liegt darin, dass die Datenvorlage an einem Ort definiert und verwaltet wird.These data templates can be reused for other UI elements in the application, the advantage is that the data template is defined and maintained in one place.

Die AlbumStyle-Datenvorlage definiert ein Raster mit zwei nebeneinanderliegenden TextBlocks.The AlbumStyle data template lays out a grid with two TextBlocks side by side. In einem wird der Name des Albums angegeben, im anderen die Anzahl der Titel auf dem Album.One specifies the name of the Album and the other the number of Tracks in the album.

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

Mit dem folgenden XAML-Code wird eine zweite ListBox erstellt.The following XAML code creates a second ListBox.

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

Im Code wird ein Pfad für ItemsSource angegeben.The code specifies a path for the ItemsSource. Damit wird angegeben, dass die an dieses Steuerelement gebundenen Daten keine Daten der obersten Ebene, sondern eine Eigenschaft der Daten der obersten Ebene namens Tracks sind.This indicates that the data bound to this control is not the top-level data but a property of the top-level data named Tracks. Diese Eigenschaft stellt das Array der im Album enthaltenen Titel dar.This property represents the array of tracks contained within the album. Außerdem wird eine weitere DataTemplate namens TrackStyle angegeben.In addition, a different DataTemplate named TrackStyle is specified. Das Layout der TrackStyle-Vorlage entspricht weitgehend dem der AlbumStyle-Vorlage, die TextBlocks sind jedoch an andere Eigenschaften gebunden.The layout of the TrackStyle template is similar to that of the AlbumStyle template, but the TextBlocks are bound to different properties. Dies liegt daran, dass die beiden Vorlagen mit unterschiedlichen Datenobjekten verwendet werden.This is because the two templates are used with different data objects.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Scenario\DataBinding\WPFDataBinding

Siehe auchSee Also