次の方法で共有


方法: データ サービスのデータのコントロールへのバインド (Silverlight クライアント)

WCF Data Services では、ListBox  や ComboBox などの Silverlight コントロールを DataServiceCollection<T> のインスタンスにバインドすることができます。 このクラスは、コントロールのデータへの変更と DataServiceContext との同期を維持するためにコントロールによって生成されるイベントを処理します。 DataServiceCollection<T> は、DataServiceQuery<TElement> に基づいて定義されます。 実行されると、このクエリはコレクションのオブジェクトを提供する Open Data Protocol (OData) フィードを返します。

このトピックの手順では、次のタスクを実行する方法を示します。

  • (省略可能) Northwind データ サービスのページング機能を有効にします。

  • 新しい Silverlight アプリケーションを作成します。

  • 自動データ バインディングをサポートするクライアント データ サービス クラスを生成します。

  • データ サービスに対してクエリを実行します。

  • 結果をアプリケーションのコントロールにバインドします。

CollectionViewSource インスタンスを使用すると、マスター/詳細 Order オブジェクトおよび Order_Detail オブジェクトのバインドを簡素化できます。 これを行うには、CollectionViewSourceSource プロパティをマスター DataServiceCollection<T> に設定します。 コントロールのデータ バインディングは、コレクションが読み込まれたときに、選択した Order を変更すると表示される Order_Details が変更されるように XAML で定義されています。 詳細については、「How to: Bind to Hierarchical Data and Create a Master/Details View」を参照してください。

注意

CollectionViewSource クラスは Silverlight 3 ではサポートされていません。

この例は、データ サービスでページングが有効になっているときに OData フィードをバインドする方法を示しています。 データ フィードのページングは、OData プロトコルのバージョン 2.0 以降でサポートされています。

WCF Data Services クイック スタートの完了時に、アプリケーションがアクセスする Northwind サンプル データ サービスが作成されます。 OData Web サイトで公開されている Northwind サンプル データ サービスを使用することもできます。このサンプル データ サービスは読み取り専用で、変更内容を保存しようとするとエラーが返されます。

Northwind サンプル データ サービスのページングを有効にするには

  1. ソリューション エクスプローラーで、ASP.NET プロジェクトの下にある Northwind.svc をダブルクリックします。

    Northwind サンプル データ サービスのコード ページが開きます。

  2. データ サービスのコードで、次のコードを InitializeService メソッドに追加します。

    ' Set the data service version to V2 to support paging.
    config.DataServiceBehavior.MaxProtocolVersion = _
        System.Data.Services.Common.DataServiceProtocolVersion.V2
    
    ' Set paging limits for the Customers and Orders entity sets.
    ' These limits are set very low to demonstrate paging with the 
    ' Northwind database. Paging should be configured to optimize
    ' data service performance.
    config.SetEntitySetPageSize("Orders", 2)
    config.SetEntitySetPageSize("Order_Details", 2)
    
    // Set the data service version to V2 to support paging.
    config.DataServiceBehavior.MaxProtocolVersion = 
        System.Data.Services.Common.DataServiceProtocolVersion.V2;
    
    // Set paging limits for the Customers and Orders entity sets.
    // These limits are set very low to demonstrate paging with the 
    // Northwind database. Paging should be configured to optimize
    // data service performance.
    config.SetEntitySetPageSize("Orders", 2);
    config.SetEntitySetPageSize("Order_Details", 2);
    

    これにより、Orders および Order_Details のエンティティ セットのページングが有効になります。

Silverlight プロジェクトのアプリケーションを作成するには

  1. ソリューション エクスプローラーで、[ソリューション] を右クリックし、[追加] をポイントして、[新しいプロジェクト] をクリックします。

  2. [新しいプロジェクトの追加] ダイアログ ボックスで、[カテゴリ] ペインの [Silverlight] をクリックし、[Silverlight アプリケーション] テンプレートをクリックします。 プロジェクトに DataBindingSample という名前を付けます。

  3. [Silverlight アプリケーションの追加] ダイアログ ボックスで、[Silverlight アプリケーションをソリューション内の新規または既存の Web サイトでホストする] をクリックします。 [アプリケーションを参照するテスト ページを追加する] および [開始ページにする] をクリックします。

  4. [OK] をクリックします。

    これで、Silverlight アプリケーションが作成されます。

データ サービス参照をプロジェクトに追加するには

  1. DataBindingSample プロジェクトを右クリックして、[サービス参照の追加][探索] の順にクリックします。

    最初のタスクで作成した Northwind データ サービスが表示されます。

  2. [名前空間] テキスト ボックスに「Northwind」と入力し、[OK] をクリックします。

    プロジェクトに新しいコード ファイルが追加されます。このコード ファイルには、データ サービス リソースにアクセスし、オブジェクトとしてデータ サービス リソースと対話するデータ クラスが含まれています。 データ クラスは、名前空間 DataBindingSample.Northwind で作成されます。

クライアント アプリケーションのユーザー インターフェイスを定義するには

  1. DataBindingSample の下のソリューション エクスプローラー[参照] を右クリックして、[参照の追加] をクリックします。

    [参照の追加] ダイアログ ボックスが表示されます。

  2. System.Windows.Controls.Data を選択して、[OK] をクリックします。

  3. ソリューション エクスプローラーで、MainPage.xaml ファイルをダブルクリックします。 Silverlight アプリケーションのユーザー インターフェイスである Page クラスの XAML マークアップが開きます。

  4. 既存の XAML マークアップを、アプリケーション ユーザー インターフェイスを定義する次のマークアップに置き換えます。

    <!-- NOTE: 
      By convention, the sdk prefix indicates a URI-based XAML namespace declaration 
      for Silverlight SDK client libraries. This namespace declaration is valid for 
      Silverlight 4 only. In Silverlight 3, you must use individual XAML namespace 
      declarations for each CLR assembly and namespace combination outside the scope 
      of the default Silverlight XAML namespace. For more information, see the help 
      topic "Prefixes and Mappings for Silverlight Libraries". 
    -->
    <UserControl  x:Class="MainPage"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:sdk="https://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"            
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        Loaded="MainPage_Loaded" mc:Ignorable="d" 
                  xmlns:d="https://schemas.microsoft.com/expression/blend/2008" 
                  xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" 
                  xmlns:my="clr-namespace:DataBindingSample.Northwind" 
                  d:DesignHeight="371" d:DesignWidth="0">
        <UserControl.Resources>
            <CollectionViewSource x:Key="OrdersViewSource" 
                                  d:DesignSource="{d:DesignInstance my:Order, CreateList=True}" />
            <CollectionViewSource x:Key="OrdersOrder_DetailsViewSource" 
                                  Source="{Binding Path=Order_Details, Source={StaticResource OrdersViewSource}}" />
        </UserControl.Resources>
        <StackPanel Orientation="Vertical" Margin="10" Height="Auto" Name="LayoutRoot" Width="450">
            <StackPanel Orientation="Horizontal">
                <sdk:Label Content="Customer ID:"/>
                <TextBox Name="customerId" Text="ALFKI" Margin="10" Width="100"/>
                <Button Name="getCustomerOrders" Content="Get Orders" Height="25" Width="80" 
                        Click="getCustomerOrders_Click" />
            </StackPanel>
            <StackPanel Name="ordersStackPanel" VerticalAlignment="Top" Orientation="Vertical"  
                        DataContext="{StaticResource OrdersViewSource}">
                <Grid HorizontalAlignment="Left" Name="ordersGrid" VerticalAlignment="Top">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <sdk:Label Content="Order:" Grid.Column="0" Grid.Row="0" 
                               HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                    <ComboBox DisplayMemberPath="OrderID" Grid.Column="1" Grid.Row="0" Height="23" 
                              HorizontalAlignment="Left" ItemsSource="{Binding}" Margin="3" 
                              Name="OrderIDComboBox" VerticalAlignment="Center" Width="120" 
                              SelectionChanged="ordersList_SelectionChanged">
                        <ComboBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <VirtualizingStackPanel />
                            </ItemsPanelTemplate>
                        </ComboBox.ItemsPanel>
                    </ComboBox>
                    <sdk:Label Content="Freight:" Grid.Column="2" Grid.Row="0" HorizontalAlignment="Left" 
                               Margin="3" VerticalAlignment="Center" />
                    <TextBox Grid.Column="3" Grid.Row="0" Height="23" HorizontalAlignment="Left" 
                             Margin="3" Name="FreightTextBox" Text="{Binding Path=Freight, Mode=TwoWay, 
                        ValidatesOnExceptions=true, NotifyOnValidationError=true}" 
                             VerticalAlignment="Center" Width="120" />
                    <sdk:Label Content="Required Date:" Grid.Column="0" Grid.Row="1" 
                               HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                    <sdk:DatePicker Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" 
                                    Margin="3" Name="RequiredDateDatePicker" 
                                    SelectedDate="{Binding Path=RequiredDate, Mode=TwoWay, 
                        ValidatesOnExceptions=true, NotifyOnValidationError=true}" 
                                    VerticalAlignment="Center" Width="120" />
                    <sdk:Label Content="Order Date:" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Left" 
                               Margin="3" VerticalAlignment="Center" />
                    <TextBox Grid.Column="3" Grid.Row="1" Height="23" HorizontalAlignment="Left" 
                             Width="120" Margin="3" Name="OrderDateTextBlock" Text="{Binding Path=OrderDate}" 
                             VerticalAlignment="Center" />
                </Grid>
            </StackPanel>
            <StackPanel DataContext="{StaticResource OrdersOrder_DetailsViewSource}" Orientation="Vertical">
                <sdk:Label Content="Order items:" Margin="10"/>
                <sdk:DataGrid AutoGenerateColumns="False" Height="170" ItemsSource="{Binding}" 
                              Name="Order_DetailsDataGrid"  RowDetailsVisibilityMode="VisibleWhenSelected" 
                              Width="400">
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTextColumn x:Name="ProductIDColumn" Binding="{Binding Path=ProductID}" 
                                                Header="Product" Width="SizeToHeader" />
                        <sdk:DataGridTextColumn x:Name="QuantityColumn" Binding="{Binding Path=Quantity}" 
                                                Header="Quantity" Width="SizeToHeader" />
                        <sdk:DataGridTextColumn x:Name="DiscountColumn" Binding="{Binding Path=Discount}" 
                                                Header="Discount" Width="SizeToHeader" />
                        <sdk:DataGridTextColumn x:Name="UnitPriceColumn" Binding="{Binding Path=UnitPrice}" 
                                                Header="Unit Price" Width="SizeToHeader" />
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>
            </StackPanel>
            <Button Name="saveChangesButton" Content="Save Changes" 
                    HorizontalAlignment="Right" Click="saveChangesButton_Click"  
                    Width="100" Height="25" Margin="10"/>
    
        </StackPanel>
    </UserControl>
    

    注意

    C# アプリケーションの場合は、UserControl の Class 属性に名前空間を含める必要があります。Visual Basic アプリケーションの場合、既定の名前空間は必要ありません。

データ サービスのデータを Silverlight アプリケーションのコントロールにバインドするコードを追加するには

  1. DataBindingSample の下のソリューション エクスプローラーで、MainPage.xaml ファイルのコード ページを開き、次の using ステートメント (Visual Basic の場合は Imports) を追加します。

    using System.Windows.Data;
    using System.Data.Services.Client;
    using DataBindingSample.Northwind;
    
  2. MainPage クラスに次の宣言を追加します。

    Dim context As NorthwindEntities
    Dim trackedOrders As DataServiceCollection(Of Order)
    Dim selectedOrder As Order
    Dim ordersViewSource As CollectionViewSource
    
    NorthwindEntities context;
    DataServiceCollection<Order> trackedOrders;
    Order selectedOrder;
    CollectionViewSource ordersViewSource; 
    
  3. MainPage クラスに次の MainPage_Loaded メソッドを追加します。

    Private Sub MainPage_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
        ' Initialize the data service context.
        context = _
                New NorthwindEntities(New Uri("https://localhost:54321/Northwind.svc"))
    
        ' Initialize the binding and view source collections.
        trackedOrders = New DataServiceCollection(Of Order)()
        ordersViewSource = CType(Me.Resources("OrdersViewSource"), CollectionViewSource)
    
        ' Define a handler for the LoadCompleted event of the collection.
        AddHandler trackedOrders.LoadCompleted, _
        AddressOf trackedOrders_LoadCompleted
    End Sub
    
    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        // Initialize the data service context.
        context =
            new NorthwindEntities(new Uri("Northwind.svc", UriKind.Relative));
    
        // Initialize the binding and view source collections.
        trackedOrders = new DataServiceCollection<Order>();
        ordersViewSource = (CollectionViewSource)this.Resources["OrdersViewSource"];
    
        // Define a handler for the LoadCompleted event of the binding collection.
        trackedOrders.LoadCompleted +=
            new EventHandler<LoadCompletedEventArgs>(trackedOrders_LoadCompleted);
    }
    

    ページが読み込まれると、このコードがバインディング コレクションとバインディング コンテンツを初期化して、メソッドを登録し、バインディング コレクションで発生した LoadCompleted イベントを処理します。

  4. MainPage クラスに次のコードを挿入します。

    Private Sub getCustomerOrders_Click(ByVal sender As Object, _
                                        ByVal e As RoutedEventArgs)
    
        ' Define a query that returns orders for a give customer.
        Dim query = From orderByCustomer In context.Orders _
                        Where orderByCustomer.Customer.CustomerID = _
                        Me.customerId.Text _
                        Select orderByCustomer
    
        ' Asynchronously load the result of the query.
        trackedOrders.LoadAsync(query)
    
        ' Disable the button until the loading is complete.
        getCustomerOrders.IsEnabled = False
    End Sub
    Private Sub trackedOrders_LoadCompleted(ByVal sender As Object, _
                                            ByVal e As LoadCompletedEventArgs)
        If e.Error Is Nothing Then
            ' Load all pages of Orders before binding.
            If trackedOrders.Continuation IsNot Nothing Then
                trackedOrders.LoadNextPartialSetAsync()
            Else
    
                ' Bind the root StackPanel element to the collection
                ' related object binding paths are defined in the XAML.
                ordersViewSource.Source = trackedOrders
    
                ' Re-enable the button since the loading is complete.
                getCustomerOrders.IsEnabled = True
            End If
        Else
            MessageBox.Show(String.Format("An error has occured: {0}", e.Error.Message))
            getCustomerOrders.IsEnabled = True
        End If
    End Sub
    
    private void getCustomerOrders_Click(object sender, RoutedEventArgs e)
    {
        // Reset the grids.
        ordersViewSource.Source = null;
    
        // Define a query that returns orders for a give customer.
        var query = from orderByCustomer in context.Orders
                    where orderByCustomer.Customer.CustomerID == this.customerId.Text
                    select orderByCustomer;
    
        // Asynchronously load the result of the query.
        trackedOrders.LoadAsync(query);
    
        // Disable the button until the loading is complete.
        getCustomerOrders.IsEnabled = false;
    }
    
    private void trackedOrders_LoadCompleted(object sender, LoadCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            // Load all pages of Orders before binding.
            if (trackedOrders.Continuation != null)
            {
                trackedOrders.LoadNextPartialSetAsync();
            }
            else
            {
                // Bind the root StackPanel element to the collection;
                // related object binding paths are defined in the XAML.
                ordersViewSource.Source = trackedOrders;
    
                // Re-enable the button since the loading is complete.
                getCustomerOrders.IsEnabled = true;
            }
        }
        else
        {
            MessageBox.Show(string.Format("An error has occured: {0}",e.Error.Message));
            getCustomerOrders.IsEnabled = true;
        }
    }
    

    getCustomerOrders ボタンがクリックされると、次の操作が実行されます。

    • LoadAsync メソッドがバインディング コレクションで呼び出され、指定した顧客 ID でフィルター処理された注文を返す、指定されたクエリを実行します。

    • Continuation プロパティが値を返す場合は、以降の結果のページを読み込むために LoadNextPartialSetAsync メソッドが呼び出されます。

    • 読み込まれた Order オブジェクトのコレクションが、ページ上のすべてのコントロールのマスター バインディング オブジェクトである CollectionViewSourceSource プロパティにバインドされます。

  5. MainPage クラスに次のコードを挿入します。

    Private Sub ordersList_SelectionChanged(ByVal sender As Object, _
                                            ByVal e As SelectionChangedEventArgs)
        ' Get the selected Order in the DataGrid.    
        Dim ordersList As ComboBox = CType(sender, ComboBox)
        selectedOrder = CType(ordersList.SelectedItem, Order)
    
        If Not selectedOrder Is Nothing Then
            ' Asynchronously load related items, if they are not already loaded.
            If selectedOrder.Order_Details.Count = 0 Then
    
                ' Register the method to handle the LoadCompleted event.
                AddHandler selectedOrder.Order_Details.LoadCompleted, _
                AddressOf Order_Details_LoadCompleted
    
                Try
                    ' Load the related items.
                    selectedOrder.Order_Details.LoadAsync()
                Catch ex As InvalidOperationException
                    MessageBox.Show(String.Format("An error has occured: {0}", _
                            ex.Message))
                End Try
            End If
        End If
    End Sub
    Private Sub Order_Details_LoadCompleted(ByVal sender As Object, _
                                            ByVal e As LoadCompletedEventArgs)
        Dim trackedItems As DataServiceCollection(Of Order_Detail) = _
            CType(sender, DataServiceCollection(Of Order_Detail))
    
        ' Load any remaining pages of Order_Details.
        If Not trackedItems.Continuation Is Nothing Then
            Try
                trackedItems.LoadNextPartialSetAsync()
            Catch ex As InvalidOperationException
                MessageBox.Show(String.Format("An error has occured: {0}", _
                        ex.Message))
            End Try
        End If
    End Sub
    
    private void ordersList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // Get the selected Order in the DataGrid.    
        ComboBox ordersList = sender as ComboBox;
        selectedOrder = ((Order)(ordersList.SelectedItem));
    
        if (selectedOrder != null)
        {
            // Asynchronously load related items, if they are not already loaded.
            if (selectedOrder.Order_Details.Count == 0)
            {
                // Register the method to handle the LoadCompleted event.
                selectedOrder.Order_Details.LoadCompleted +=
                    new EventHandler<LoadCompletedEventArgs>(
                        Order_Details_LoadCompleted);
                try
                {
                    // Load the related items.
                    selectedOrder.Order_Details.LoadAsync();
                }
                catch (InvalidOperationException ex)
                {
                    MessageBox.Show(string.Format("An error has occured: {0}",
                        ex.Message));
                }
            }
        }
    }
    
    void Order_Details_LoadCompleted(object sender, LoadCompletedEventArgs e)
    {
        DataServiceCollection<Order_Detail> trackedItems = 
            sender as DataServiceCollection<Order_Detail>;
    
        // Load any remaining pages of Order_Details.
        if (trackedItems.Continuation != null)
        {
            try
            {
                trackedItems.LoadNextPartialSetAsync();
            }
            catch (InvalidOperationException ex)
            {
                MessageBox.Show(string.Format("An error has occured: {0}",
                    ex.Message));
            }
        }
    }
    

    ordersList_SelectionChanged メソッドは SelectionChanged イベントを処理します。 ユーザーが ComboBox の注文を選択すると、次の操作が実行されます。

    • Order_Details_LoadCompleted メソッドが登録され、選択された注文に関連付けられた項目を表す DataServiceCollection<T> によって生成された LoadCompleted イベントが処理されます。

    • LoadAsync メソッドが、ComboBox で選択された Order に関連付けられた Order_Details オブジェクトを非同期で読み込むために呼び出されます。

    • Continuation プロパティが値を返す場合は、以降の結果のページを読み込むために LoadNextPartialSetAsync メソッドが呼び出されます。

    • 読み込まれた項目は、子 CollectionViewSource によって DataGrid に伝達されます。

  6. 次のコードを挿入します。このコードは、変更内容を MainPage クラスに保存します。

    ' We need to persist the result of an operation 
    ' to be able to invoke the dispatcher.
    Private currentResult As IAsyncResult
    Private Sub saveChangesButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        ' Define the delegate to callback into the process
        Dim callback As AsyncCallback = AddressOf OnChangesSaved
        Try
            ' Start the saving changes operation. This needs to be a 
            ' batch operation in case we are added a new object with 
            ' a new relationship.
            context.BeginSaveChanges(SaveChangesOptions.Batch, _
                    callback, context)
    
        Catch ex As Exception
            MessageBox.Show(String.Format( _
                            "The changes could not be saved to the data service.\n" _
                            & "The following error occurred: {0}", ex.Message))
        End Try
    End Sub
    Private Sub OnChangesSaved(ByVal result As IAsyncResult)
        ' Persist the result for the delegate.
        currentResult = result
    
        ' Use the Dispatcher to ensure that the 
        ' asynchronous call returns in the correct thread.
        Dispatcher.BeginInvoke(AddressOf ChangesSavedByDispatcher)
    End Sub
    Private Sub ChangesSavedByDispatcher()
    
        Dim errorOccured As Boolean = False
        context = CType(currentResult.AsyncState, NorthwindEntities)
    
        Try
            ' Complete the save changes operation and display the response.
            Dim response As DataServiceResponse = _
            context.EndSaveChanges(currentResult)
    
            For Each changeResponse As ChangeOperationResponse In response
                If changeResponse.Error IsNot Nothing Then errorOccured = True
            Next
            If Not errorOccured Then
                MessageBox.Show("The changes have been saved to the data service.")
            Else
                MessageBox.Show("An error occured. One or more changes could not be saved.")
            End If
        Catch ex As Exception
            ' Display the error from the response.
            MessageBox.Show(String.Format("The following error occured: {0}", ex.Message))
        End Try
    End Sub
    
    private void saveChangesButton_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            // Start the saving changes operation. This needs to be a 
            // batch operation in case we are added a new object with 
            // a new relationship.
            context.BeginSaveChanges(SaveChangesOptions.Batch,
                OnChangesSaved, context);
        }
        catch (Exception ex)
        {
            MessageBox.Show(string.Format("The changes could not be saved to the data service.\n"
                + "The following error occurred: {0}", ex.Message));
        }
    }
    
            private void OnChangesSaved(IAsyncResult result)
            {
                bool errorOccured = false;
    
                // Use the Dispatcher to ensure that the 
                // asynchronous call returns in the correct thread.
                Dispatcher.BeginInvoke(() =>
                {
                    context = result.AsyncState as NorthwindEntities;
    
                    try
                    {
                        // Complete the save changes operation and display the response.
                        DataServiceResponse response = context.EndSaveChanges(result);
    
                        foreach (ChangeOperationResponse changeResponse in response)
                        {
                            if (changeResponse.Error != null) errorOccured = true;
                        }
                        if (!errorOccured)
                        {
                            MessageBox.Show("The changes have been saved to the data service.");
                        }
                        else
                        {
                            MessageBox.Show("An error occured. One or more changes could not be saved.");
                        }
                    }
                    catch (Exception ex)
                    {
                        // Display the error from the response.
                        MessageBox.Show(string.Format("The following error occured: {0}", ex.Message));
                    }
                }
                );
            }
    

    このコードは、データ バインド コントロールに加えられた変更内容を非同期でデータ サービスに送り返します。

関連項目

その他の技術情報

OData フィードの使用

WCF Data Services (Silverlight)

WCF Data Services Tasks for Silverlight

遅延コンテンツの読み込み (WCF Data Services)

コントロールへのデータのバインド (WCF Data Services)