Привязка объектов к элементам управления (платформа Entity Framework)

Объект Entity Framework позволяет связать элементы управления, такие как ComboBox, ListView и DataGridView, с объектом EntityCollection или объектом ObjectResult, возвращаемым при выполнении запроса ObjectQuery. Оба класса платформы Entity Framework реализуют интерфейс IListSource для привязки данных. Типы сущности, созданные средствами Entity Framework , реализуют INotifyPropertyChanged. Это позволяет обеспечить двустороннюю привязку данных между свойствами объекта и элементами управления, благодаря чему обновления в элементах управления распространяются в обратном направлении на свойства привязанного объекта.

Чтобы привязать объекты к элементу управления Windows Form, задайте свойство DataSource элемента управления для коллекции EntityCollection или для элементов ObjectResult, возвращаемых при вызове метода Execute для объекта ObjectQuery. В следующем примере показана привязка коллекции EntityCollection к элементу управления DataGridView:

// Bind the items for this order to the DataGridView.
lineItemsDataGrid.DataSource = order.SalesOrderDetails;

Дополнительные сведения см. в разделе Как привязать объекты к элементам управления Windows Form (платформа Entity Framework).

Можно создавать источники данных на основании объектов из приложения Visual Studio. После того как в проекте определен тип сущности как источник данных, появляется возможность создавать формы, отображающие данные платформы Entity Framework , путем простого перетаскивания элементов из окна Источники данных в формы. Эти элементы становятся в форме элементами управления, привязанными к источнику данных. Дополнительные сведения см. в разделе Data Sources Window. Во время выполнения результат типизированного запроса ObjectQuery назначается свойству DataSource элемента BindingSource, используемого источником данных. Свойства объектов, возвращаемых запросом, будут отображены в элементах управления. Как и при прямой привязке данных, изменения, произведенные в элементах управления, применяются к источнику данных при вызове метода SaveChanges. Дополнительные сведения см. в разделе Как добавить объект в качестве источника данных проекта (платформа Entity Framework).

Чтобы привязать объекты к элементу управления Windows Presentation Foundation (WPF), задайте в качестве свойства DataContext элемента управления коллекцию EntityCollection или результат запроса ObjectResult, возвращаемого при вызове метода Execute для объекта ObjectQuery. Используйте свойство ItemsSource, чтобы задать источник объектов для элемента управления. Если элемент управления привязывается к связанному объекту, возвращаемому свойством навигации, включите путь в привязку, определенную для свойства ItemsSource. Данный путь задается относительно корневого объекта, заданного свойством DataContext родительского элемента управления. В следующем примере задается свойство DataContext элемента управления Grid для привязки элемента управления к объекту ObjectResult.

' Execute the query and bind the result to the OrderItems control.
Me.orderItemsGrid.DataContext = CType(query, ObjectQuery).Execute(MergeOption.AppendOnly)
// Execute the query and bind the result to the OrderItems control.
this.orderItemsGrid.DataContext = ((ObjectQuery)query).Execute(MergeOption.AppendOnly);

В следующем примере показано определение привязки XAML для дочерних элементов управления ListView и ComboBox:

<ComboBox DisplayMemberPath="SalesOrderID" ItemsSource="{Binding}"
          IsSynchronizedWithCurrentItem="true" 
          Height="23" Margin="122,12,198,0" Name="comboBoxOrder" VerticalAlignment="Top"/>
<ListView ItemsSource="{Binding Path=SalesOrderDetails}" 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>

Дополнительные сведения см. в разделе Как привязать объекты к элементам управления WPF (платформа Entity Framework).

Платформа Entity Framework предоставляет серверный веб-элемент управления EntityDataSource. Элемент управления источником данных ASP.NET можно использовать для привязки результатов запросов объектов к веб-странице ASP.NET. Дополнительные сведения см. в разделе Пример элемента управления EntityDataSource.

Во время привязки объектов к элементам управления следует принимать во внимание следующие соображения.

  • Не рекомендуется привязывать элементы управления непосредственно к ObjectQuery. Вместо этого лучше привязывать элементы управления к результату метода Execute. При выполнении привязки таким образом можно избежать многочисленного выполнения запроса во время привязки.

    Bb738469.note(ru-ru,VS.100).gifПримечание
    Если вы предпочитаете работать с запросами LINQ, то рекомендуется привести результат запроса к ObjectQuery и вызвать метод Execute.

    В следующем примере выполняется привязка элемента управления ComboBox к объекту ObjectResult, возвращаемому при выполнении запроса ObjectQuery, имеющего тип SalesOrderHeader.

    // Create a query for orders that includes line items.
    ObjectQuery<SalesOrderHeader> orderQuery = context.SalesOrderHeaders
        .Where("it.CustomerID = @customerId", 
        new ObjectParameter("customerId", customerId))
        .Include("SalesOrderDetails");
    
    // Display the PO number in the combo box.
    this.ordersListBox.DisplayMember = "PurchaseOrderNumber";
    
    // Bind the combo box to the ObjectResult of SalesOrderHeader 
    // that is returned when the query is executed.
    this.ordersListBox.DataSource = orderQuery.Execute(MergeOption.AppendOnly);
    
  • Чтобы убедиться, что источник данных обновлен, может понадобиться повторно выполнить запрос, применив метод Execute. Будет выполнена привязка элемента управления к новому объекту ObjectResult. Сделать это с целью обновления данных следует в следующих случаях:

    • Изменения производятся в объекте ObjectContext без привязки к элементу управления.

    • Изменения вносятся в данные источника данных.

    • Объекты были возвращены в режиме NoTracking.

  • После привязки данных можно получить доступ к отдельным объектам сущности из элемента управления. Но к коллекции доступ из привязанного элемента управления получить нельзя. Дополнительные сведения см. в разделе Как привязать объекты к элементам управления Windows Form (платформа Entity Framework).

  • Можно привязать коллекцию EntityCollection к элементу управления, поскольку она реализует интерфейс IListSource. Однако, если метод OfType выполняется для коллекции EntityCollection с целью возврата коллекции объектов производного типа, возвращаемый объект IEnumerable нельзя напрямую привязать к элементу управления. Если необходимо привязать элемент управления к коллекции объектов производного типа, полученной из объекта EntityCollection, рекомендуется использовать метод CreateSourceQuery для получения объекта ObjectQuery, определяющего базовую коллекцию EntityCollection. Элемент управления можно привязать к выполнению запроса ObjectQuery, возвращаемого методом OfType объекта ObjectQuery, как это показано в следующем примере:

    // Bind the data grid to the result of the execution of the ObjectQuery 
    // that returns only the online courses for the selected department.
    dataGridViewCourses.DataSource =
        selectedDepartment.Courses.CreateSourceQuery()
        .OfType<OnlineCourse>().Execute(MergeOption.AppendOnly);
    

    Дополнительные сведения см. в разделе Как привязать элементы управления к производным типам (платформа Entity Framework).

В этом разделе

Как привязать объекты к элементам управления Windows Form (платформа Entity Framework)

Как привязать объекты к элементам управления WPF (платформа Entity Framework)

Как привязать элементы управления к производным типам (платформа Entity Framework)

Как добавить объект в качестве источника данных проекта (платформа Entity Framework)

См. также

Основные понятия

Работа с объектами (платформа Entity Framework)

Другие ресурсы

Walkthrough: Creating the Class Schedule Web Application