Freigeben über


Gewusst wie: Binden von Objekten an Windows Presentation Foundation-Steuerelemente (Entity Framework)

Object Services ermöglicht Ihnen, Windows Presentation Foundation (WPF)-Elemente, wie etwa ListBox****oder ComboBox an eine EntityCollection oder ein ObjectQuery-Ergebnis zu binden. Es wird empfohlen, Steuerelemente nicht direkt an eine ObjectQuery zu binden. Stattdessen sollten die Steuerelemente an das Ergebnis der Execute-Methode gebunden werden. Weitere Informationen finden Sie unter Binden von Objekten an Steuerelemente (Entity Framework).

Das Beispiel in diesem Thema beruht auf dem AdventureWorks Sales-Modell. Um den Code in diesem Beispiel auszuführen, müssen Sie Ihrem Projekt bereits das AdventureWorks Sales-Modell hinzugefügt und das Projekt zur Verwendung von Entity Framework konfiguriert haben. Führen Sie dazu die Verfahren unter Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework) durch.

Beispiel

Das folgende Beispiel ist aus der CodeBehind-Seite für eine Extensible Application Markup Language (XAML)-Seite, die das Fenster SalesOrders in WPF definiert. Beim Laden des Fensters werden ein ObjectResult von SalesOrderHeader und verbundene SalesOrderDetail-Objekte durch einen Aufruf der Execute-Methode der ObjectQuery zurückgegeben. Dieses Ergebnis ist an die DataContext-Eigenschaft eines Grid-Steuerelements gebunden.

Imports System
Imports System.Data
Imports System.Data.Objects
Imports System.Windows
Imports Microsoft.Samples.Edm
Imports Microsoft.Samples.Edm.AdventureWorksModel

Namespace Microsoft.Samples.Edm
    Partial Public Class SalesOrders
        Inherits Window
        Private context As AdventureWorksEntities
        Private customerId As Integer = 277
        Private Sub SalesOrdersForm_Loaded( _
            ByVal sender As Object, ByVal e As RoutedEventArgs)
            Try
                ' Instantiate the ObjectContext.
                context = New AdventureWorksEntities()

                ' Define a query that returns orders for a customer.
                Dim query As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeader _
                    .Where("it.customerID = @customerid", _
                    New ObjectParameter("customerid", customerId)) '_
                '.Include("SalesOrderDetail")

                ' Execute the query and bind the result to the OrderItems control.
                Me.orderItemsGrid.DataContext = query.Execute(MergeOption.AppendOnly)
            Catch ex As EntitySqlException
                MessageBox.Show(ex.Message)
            End Try
        End Sub
        Private Sub buttonClose_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Me.Close()
        End Sub
        Public Sub New()
            InitializeComponent()
        End Sub
    End Class
End Namespace
using System;
using System.Data;
using System.Data.Objects;
using System.Windows;
using AdventureWorksModel;

namespace Microsoft.Samples.Edm
{
    /// <summary>
    /// Interaction logic for SalesOrders.xaml
    /// </summary>
    public partial class SalesOrders : Window
    {
        private AdventureWorksEntities context;
        private int customerId = 277;

        private void SalesOrdersForm_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                // Instantiate the ObjectContext.
                context = new AdventureWorksEntities();

                // Define a query that returns orders for a customer.
                ObjectQuery<SalesOrderHeader> query = context.SalesOrderHeader
                    .Where("it.customerID = @customerid",
                    new ObjectParameter("customerid", customerId))
                    .Include("SalesOrderDetail");
                
                // Execute the query and bind the result to the OrderItems control.
                this.orderItemsGrid.DataContext = query.Execute(MergeOption.AppendOnly);
            }
            catch (EntitySqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void buttonClose_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
        public SalesOrders()
        {
            InitializeComponent();
        }
    }
}

Im folgenden ist ein XAML-Ausschnitt dargestellt, mit dem das Fenster SalesOrders in WPF definiert wird. Die ItemsSource-Eigenschaft eines ComboBox ist an die ObjectResult<SalesOrderHeader>-Datenquelle gebunden, die in der CodeBehind-Seite definiert ist. Wenn eine Bestellung ausgewählt wird, werden die EntityCollection von verbundenen SalesOrderDetail-Objekten an die ListView gebunden, die durch die ItemsSource-Eigenschaft angegeben ist. Mit dem Pfadwert Path=SalesOrderDetail in der Bindung wird sichergestellt, dass ListView an die SalesOrderDetail-Eigenschaft gebunden ist, die eine EntityCollection zurückgibt.

    <Window x:Class="Microsoft.Samples.Edm.SalesOrders"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="Customer Sales Orders" Height="335" Width="425" 
        Name="SalesOrdersForm" Loaded="SalesOrdersForm_Loaded">
        <Grid Name="orderItemsGrid">
        <ComboBox DisplayMemberPath="SalesOrderID" ItemsSource="{Binding}"
                  IsSynchronizedWithCurrentItem="true" 
                  Height="23" Margin="122,12,198,0" Name="comboBoxOrder" VerticalAlignment="Top"/>
        <ListView ItemsSource="{Binding Path=SalesOrderDetail}" Name="listViewItems" Margin="34,46,34,50">
            <ListView.View>
                <GridView AllowsColumnReorder="False" ColumnHeaderToolTip="Line Items">
                    <GridViewColumn DisplayMemberBinding="{Binding Path=ProductID}" 
                        Header="Product" Width="50"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=OrderQty}" 
                        Header="Quantity" Width="50"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=UnitPrice}" 
                        Header="Cost" Width="50"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=LineTotal}" 
                        Header="Line Total" Width="80"/>
                </GridView>
            </ListView.View>
        </ListView>
        <Label Height="28" Margin="34,12,0,0" Name="orderLabel" VerticalAlignment="Top" 
               HorizontalAlignment="Left" Width="93">Order:</Label>
        <Button Height="23" HorizontalAlignment="Right" Margin="0,0,12,12" 
                Name="buttonClose" VerticalAlignment="Bottom" Width="75" Click="buttonClose_Click">Close</Button>
    </Grid>
</Window>

Siehe auch

Aufgaben

Gewusst wie: Binden von Objekten an Windows Form-Steuerelemente (Entity Framework)
Gewusst wie: Hinzufügen eines Objekts als Projektdatenquelle (Entity Framework)

Konzepte

Binden von Entitätsdaten an Steuerelemente (Anwendungsszenarien)
Binden von Objekten an Steuerelemente (Entity Framework)
Binden von Entitätsdaten an Steuerelemente (Anwendungsszenarien)

Weitere Ressourcen

Arbeiten mit Objekten (Entity Framework-Aufgaben)
Übersicht über die Datenbindung (WPF)