方法 : LINQ クエリの結果にバインドする

この例では、LINQ クエリを実行し、その結果にバインドする方法について説明します。

使用例

次の例では、2 つのリスト ボックスを作成します。 最初のリスト ボックスには 3 つのリスト項目が含まれます。

<ListBox SelectionChanged="ListBox_SelectionChanged"
         SelectedIndex="0" Margin="10,0,10,0" >
    <ListBoxItem>1</ListBoxItem>
    <ListBoxItem>2</ListBoxItem>
    <ListBoxItem>3</ListBoxItem>
</ListBox>
<ListBox Width="400" Margin="10" Name="myListBox"
         HorizontalContentAlignment="Stretch"
         ItemsSource="{Binding}"
         ItemTemplate="{StaticResource myTaskTemplate}"/>

最初のリスト ボックスから項目を選択すると、次のイベント ハンドラーが呼び出されます。 この例では、Tasks は Task オブジェクトのコレクションです。 Task クラスには、Priority という名前のプロパティがあります。 このイベント ハンドラーは、優先順位値が選択された Task オブジェクトのコレクションを返す LINQ クエリを実行し、それを DataContext として設定します。

Imports System.Linq


...


        Private tasks As New Tasks()


...


        Private Sub ListBox_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs)
            Dim pri As Integer = Int32.Parse((TryCast((TryCast(sender, ListBox)).SelectedItem, ListBoxItem)).Content.ToString())

            Me.DataContext = From task In tasks
                             Where task.Priority = pri
                             Select task
        End Sub
using System.Linq;


...


Tasks tasks = new Tasks();


...


private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int pri = Int32.Parse(((sender as ListBox).SelectedItem as ListBoxItem).Content.ToString());

    this.DataContext = from task in tasks
                       where task.Priority == pri
                       select task;
}

2 つ目のリスト ボックスは、ItemsSource 値が {Binding} に設定されているため、そのコレクションにバインドされます。 その結果、返されたコレクションが myTaskTemplate DataTemplate に基づいて表示されます。

参照

処理手順

方法 : XAML でデータをバインディング可能にする

方法 : コレクションにバインドして選択に基づく情報を表示する

概念

WPF Version 4 の新機能

データ バインディングの概要

その他の技術情報

データ バインディングに関する「方法」トピック