方法: LINQ クエリの結果にバインドするHow to: Bind to the Results of a LINQ Query

この例では、LINQ クエリを実行し、結果にバインドする方法を示します。This example demonstrates how to run a LINQ query and then bind to the results.

Example

次の例では、2 つのリスト ボックスを作成します。The following example creates two list boxes. 最初のリスト ボックスには、次の 3 つのリスト項目が含まれています。The first list box contains three list items.

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

次のイベント ハンドラーを呼び出す最初のリスト ボックスから項目を選択します。Selecting an item from the first list box invokes the following event handler. この例でTasksのコレクションであるTaskオブジェクト。In this example, Tasks is a collection of Task objects. Taskクラスという名前のプロパティにはPriorityします。The Task class has a property named Priority. このイベント ハンドラーのコレクションを返す LINQ クエリを実行するTaskオブジェクトを選択した優先順位の値を持ちとして設定し、 DataContext:This event handler runs a LINQ query that returns the collection of Task objects that have the selected priority value, and then sets that as the DataContext:

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}します。The second list box binds to that collection because its ItemsSource value is set to {Binding}. その結果、返されるコレクションが表示されます (に基づいて、 myTaskTemplate DataTemplate)。As a result, it displays the returned collection (based on the myTaskTemplateDataTemplate).

関連項目See also