我有一个ListBox,其中包含大量数据。我想使用SearchBox在此列表中搜索项目,以便根据在SearchBox中输入的文本,ListBox中的项目列表应相应地更改。 我在互联网上查了一下,却找不到任何如何做的例子。 非常感谢您的帮助/建议。 这是我的XAML
<SearchBox
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Height="50"
Margin="10,0,10,10"/>
</StackPanel>
<ListBox
x:Name="lbSkills"
Grid.Row="1"
Margin="10,0,10,10" SelectionChanged="lbSkills_SelectionChanged">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,0,0,1" BorderBrush="Beige">
<Grid Width="auto" HorizontalAlignment="Stretch">
<TextBlock VerticalAlignment="Center" FontSize="26" Grid.Column="0" Foreground="Black" Text="{Binding SkillDescription}"/>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
您需要一个文本框,一个按钮以及一个列表框或DataGrid。
将文本框连接到viewmodel属性。将按钮连接到viewmodel命令属性。将listbox或datagrid源连接到viewmodel上的observable list属性。执行按钮时运行linq搜索查询并填充可观察列表。
如果您需要特定于代码的解决方案,请发送评论。
更新1:
链接到已实施搜索的示例项目 https://mahowling.wordpress.com/2014/07/31/wpf-search-text-box-for-mvvm/
答案 1 :(得分:0)
您可以通过CollectionView
过滤List的绑定集合。
您的实施可以如下:
定义TextChanged处理程序;获取CollectionView
的{{1}}并定义ListBox's ItemsSource
代理人。您可以存储为filter
成员变量,这样您就不需要一次又一次地获取CollectionView
CollectionView
因为,文本Changed事件会在每个键击中触发,因此您可以实现延迟搜索。您可以按照this条款来实现该目标。