WPF - 使用自动完成框过滤DataCollection

时间:2013-09-03 08:30:03

标签: wpf xaml data-binding filter autocompletebox

我有一个完美的视图和ViewModel。我最近添加了一个AutocompleteBox(可在WPF Toolkit中找到),它允许用户快速查找项目。

我的观点如下:

  • 包含名为People的CollectionViewSource的ItemsControl。生成完美
  • AutocompleteBox,其中下拉列表仅显示包含用户在AutocompleteBox中键入的值的项目。效果很好。如果我输入John,我的CollectionViewSource中名为People的所有人都会在下拉列表中显示名称为John的人。

我的问题是:当用户选择他希望从下拉菜单中看到的项目时,如何过滤我的ItemsControl?

我的代码到目前为止在XAML中绑定数据:

<toolkit:AutoCompleteBox Height="25" Width="400"
                                     Foreground="AliceBlue"
                                     ItemsSource="{Binding People.View}"
                                     ValueMemberPath="Name"
                                     Text="{Binding Name}"
                                     IsTextCompletionEnabled="True"
                                     FilterMode="Contains"
                                     Background="#303030">
                <toolkit:AutoCompleteBox.ItemTemplate>
                    <DataTemplate>
                        <Grid Width="360" HorizontalAlignment="Left">
                            <StackPanel Orientation="Vertical" HorizontalAlignment="Left"
                                        VerticalAlignment="Top" Width="300">
                                <TextBlock Text="{Binding Name}" FontWeight="SemiBold" Foreground="#25A0DA"
                                           FontSize="14" Width="300"/>
                                <TextBlock Text="{Binding Status}" FontWeight="Normal" Foreground="White"
                                           FontSize="10" Width="300"/>
                            </StackPanel>
                        </Grid>
                    </DataTemplate>
                </toolkit:AutoCompleteBox.ItemTemplate>
            </toolkit:AutoCompleteBox>

<ItemsControl x:Name="tStack" Grid.Column="0" Grid.Row="1"
                      ItemsSource="{Binding People.View}"
                      HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                      BorderThickness="0.5">
</ItemsControl>

itemsControl是样式化的,其中的项目格式也是模板化/样式化的,但是太长且没有建设性,无法在此处发布。

1 个答案:

答案 0 :(得分:0)

从您的viewmodel中绑定Name的{​​{1}}属性设置器,您必须过滤支持toolkit:AutoCompleteBox.Text i,e Collectionview ItemsSource的ObservableCollection {1}}。

如果你有Collectionsource,那么你可以像下面那样应用过滤器:

ItemsControl

从名字属性的Setter你可以打电话给ICollectionView _peopleView = CollectionViewSource.GetDefaultView(peoples); _peopleView .Filter = PeopleFilter private bool PeopleFilter(object item) { People people= item as People; return people.Name.Contains( _filterString ); //Here filter string will be your Name prperty value } ;应用过滤器

由于