在wpf中的可观察集合树视图上的搜索框

时间:2014-11-27 18:23:31

标签: wpf treeview observablecollection

我有一个文本框和一个可观察集合的树视图。我需要根据文本框的文本值过滤树视图中的可观察集合。 所有列表都以匹配的文本开头显示

2 个答案:

答案 0 :(得分:0)

什么是“可观察集合的树视图”?它真的是一个可观察集合的树视图吗?

过滤它对用户来说可能变得非常棘手。过滤父节点时应该怎么办?他们的孩子是否应该被过滤掉,甚至认为他们满意?

无论如何,将视图模型属性绑定到文本框。在setter中做你的过滤逻辑。将树视图绑定到单独的列表,该列表仅包含令人满意的记录。另一种选择是使用CollectionView。

答案 1 :(得分:0)

当键入文本框

时调用MVVM中的函数
public void SearchChild()
        {
            if (!string.IsNullOrEmpty(SearchFilter))
            {
                var ChildList = new ObservableCollection<TestArtifact>();
                foreach (var n in FolderItems)
                {
                    if (n.Name.ToLower().StartsWith(SearchFilter.Trim().ToLower()))
                    {
                        ChildList.Add(n);
                        continue;
                    }
                    var a = (n.Children).Where((x) => x.Name.ToLower().StartsWith(SearchFilter.Trim().ToLower())).ToList();
                    if (a.Count > 0)
                    {
                        n.Children = null;
                        n.Children = a;
                        ChildList.Add(n);
                    }
                }
                SearchFolderItems = new ObservableCollection<TestArtifact>(ChildList);
                NotifyOfPropertyChange(() => SearchFolderItems);
                return;
            }
            SearchFolderItems = FolderItems;
            NotifyOfPropertyChange(() => SearchFolderItems);

        }

Xaml代码..

<TextBox x:Name="SearchScript" Text="{Binding SearchFilter,UpdateSourceTrigger=PropertyChanged}" ToolTip="{Binding Path=Text}" 
                    Grid.Column="0" Grid.Row="0" Margin="10" cal:Message.Attach="[Event KeyUp] = [Action SearchChild]" />

<TreeView x:Name="FolderView" ItemsSource="{Binding SearchFolderItems, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="0" Grid.Row="1" Margin="{Binding ElementName=Editor,Path=Margin}">