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)