0

我有一个运行良好的视图和 ViewModel。我最近添加了一个 AutocompleteBox(在 WPF 工具包中找到),它允许用户快速查找项目。

我的看法是这样的:

  • 一个 ItemsControl,其中包含名为 People 的 CollectionViewSource。完美生成
  • 一个自动完成框,其中下拉列表仅显示包含用户在自动完成框中键入的值的项目。效果很好。如果我键入 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 是样式化的,其中项目的格式也是模板化/样式化的,但是太长且不具有建设性,无法在此处发布。

4

1 回答 1

0

从绑定Name到的视图模型中的属性设置器中toolkit:AutoCompleteBox.Text,您必须过滤支持您的Collectionviewi,eItemsSource的ObservableCollection ItemsControl

如果您随身携带 Collectionsource,则可以对其应用过滤器,如下所示:

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
}

从名称属性的设置器中,您将不得不调用_peopleView .Refresh();应用过滤器

谢谢

于 2013-09-03T08:35:28.373 回答