次の方法で共有


Windows Presentation Foundation クライアントのデータ バインディング

WPFDataBinding サンプルは、Windows Presentation Foundation (WPF) クライアントでのデータ バインディングの使用を示しています。 このサンプルでは、クライアントに返すアルバムの配列をランダムに生成する Windows Communication Foundation (WCF) サービスを使用します。 各アルバムには、名前、価格、アルバム トラックのリストがあります。 アルバム トラックには名前と期間があります。 サービスによって返される情報は、Windows Presentation Foundation (WPF) クライアントによって提供されるユーザー インターフェイス (UI) に自動的にバインドされます。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

データ バインディングを使用すると、データ ソースを UI に自動的にバインドできます。 これにより、データ オブジェクトまたはデータ オブジェクトの配列からのデータを使用して各 UI 要素をプログラムで更新する必要がないため、プログラミング モデルが簡略化されます。 オブジェクトを単一の UI 要素または配列にバインドして、 ListBoxなどの複数の入力を受け取るコントロールにバインドできます。 次のコードは、UI 要素の DataContext にデータをバインドする方法を示しています。

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

前のサンプルでは、DataContext という名前のgridレイアウト要素のmyPanelが、GetAlbumList メソッドによって返されるデータに設定されています。 DataContextを使用すると、要素は、バインドに使用されるデータ ソースに関する情報と、バインディングの他の特性 (パスなど) に関する情報を親要素から継承できます。 コード行は、サーバー上のデータが更新されるたびに実行される必要があります。 たとえば、ウィンドウが初期化され、新しいアルバムが追加されたときに実行されます。

次のサンプル XAML コードでは、 ListBoxItemsSource="{Binding }"を指定します。

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

これは、最上位の UI 要素にバインドされたデータも、このコントロール (Albums の配列) にバインドされることを指定します。 さらに、 ItemTemplate="{StaticResource AlbumStyle}" では、 ListBoxの各項目に使用するデータ テンプレートを指定します。 データ テンプレートを定義して、データの書式設定方法を指定することもできます。 これらのデータ テンプレートは、アプリケーション内の他の UI 要素に再利用できます。利点は、データ テンプレートが 1 か所で定義および管理されることです。

AlbumStyle データ テンプレートは、2つのTextBlockを横に並べてグリッドを構成します。 1 つはアルバムの名前を指定し、もう 1 つはアルバム内のトラックの数を指定します。

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

次の XAML コードは、2 つ目の ListBoxを作成します。

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

コードは、 ItemsSourceのパスを指定します。 これは、このコントロールにバインドされたデータが最上位のデータではなく、 Tracksという名前の最上位データのプロパティであることを示します。 このプロパティは、アルバムに含まれるトラックの配列を表します。 さらに、DataTemplateという名前の別のTrackStyleが指定されます。 TrackStyle テンプレートのレイアウトはAlbumStyle テンプレートのレイアウトと似ていますが、TextBlockは異なるプロパティにバインドされます。 これは、2 つのテンプレートが異なるデータ オブジェクトで使用されるためです。

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

  2. ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。