edit: добавлен вызов ToList к запросу LINQ
Вы можете просто назначить ItemsSource объекта ListBox, используя LINQ в коде для этого. Предполагая, что вы даете своему ListBox имя:
<Window x:Class="WpfApplication15.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:WpfApplication15"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="300" Height="300" Title="Window1">
<Window.Resources>
<DataTemplate x:Key="LastNameFirst" DataType="WpfApplication15.Customer">
<StackPanel Margin="10 10 10 0" Orientation="Horizontal">
<TextBlock FontWeight="bold" Text="{Binding Path=LastName}"/>
<TextBlock Text=", "/>
<TextBlock Text="{Binding Path=FirstName}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox x:Name="lstCustomers"
ItemTemplate="{StaticResource LastNameFirst}"/>
</Grid>
</Window>
Вы можете назначить ItemsSource в событии Loaded:
public partial class Window1 : Window
{
public Window1()
{
this.Loaded += new RoutedEventHandler(Window1_Loaded);
InitializeComponent();
}
void Window1_Loaded(object sender, RoutedEventArgs e)
{
Customers customers = new Customers();
lstCustomers.ItemsSource = customers.Where(customer => customer.LastName.StartsWith("W")).ToList();
}
}
Предполагая, что ваш запрос LINQ будет меняться в зависимости от некоторой логики, вы можете переназначить ItemsSource в соответствующих точках.
Если вы хотите связываться без погружения в код при каждом изменении логики запроса, вам, вероятно, лучше использовать CollectionViewSource , поскольку он имеет сортировку и фильтрация возможностей (при условии, что вы используете именно LINQ).