次の方法で共有


方法: 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}"/>

最初のリスト ボックスから項目を選択すると、次のイベント ハンドラーが呼び出されます。 この例では、 TasksTask オブジェクトのコレクションです。 Task クラスには、Priorityという名前のプロパティがあります。 このイベント ハンドラーは、選択した優先度の値を持つ Task オブジェクトのコレクションを返す LINQ クエリを実行し、それを 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} に設定されているため、そのコレクションにバインドされます。 その結果、( myTaskTemplateDataTemplateに基づいて) 返されたコレクションが表示されます。

こちらも参照ください