Практическое руководство. Привязка к результатам запроса LINQ

В этом примере показано, как можно выполнить запрос LINQ, а затем выполнить привязку к результатам.

Пример

В следующем примере создаются два списка. В первом списке содержится три элемента списка.

<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. Этот обработчик событий выполняет запрос LINQ, который возвращает коллекцию объектов Task с выбранным значением приоритета, а затем задает ее в качестве свойства 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;
}

Второй список привязывается к этой коллекции путем того, что для его свойства ItemsSource задано значение {Binding}. В результате, в нем отображается возвращаемая в качестве результата коллекция (в соответствии с настройкой myTaskTemplateDataTemplate).

См. также