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 コードでは、 ListBox
は ItemsSource="{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 つのテンプレートが異なるデータ オブジェクトで使用されるためです。
サンプルを設定、ビルド、実行するには
Windows Communication Foundation サンプル のOne-Time セットアップ手順を実行していることを確認します。
ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。