方法 : 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 に基づいて表示されます。
参照
処理手順
方法 : コレクションにバインドして選択に基づく情報を表示する