Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wpf中可观察集合树视图上的搜索框_Wpf_Treeview_Observablecollection - Fatal编程技术网

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

wpf中可观察集合树视图上的搜索框,wpf,treeview,observablecollection,Wpf,Treeview,Observablecollection,我有一个文本框和一个可观察集合的树状视图。我需要根据文本框的文本值过滤树视图中的可观察集合。 所有以匹配文本开头的列表都应显示什么是“可观察集合的树状视图”?它真的是一个可观察集合的树状视图吗 对用户来说,过滤它可能变得相当棘手。当父节点被过滤掉时会发生什么?它的孩子们是否也应该被过滤掉,即使他们觉得满意 无论如何,请将视图模型特性绑定到文本框。在setter中执行过滤逻辑。将树视图绑定到单独的列表,该列表将只包含令人满意的记录。另一个选项是使用CollectionView。在文本框上按下键时调

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

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

对用户来说,过滤它可能变得相当棘手。当父节点被过滤掉时会发生什么?它的孩子们是否也应该被过滤掉,即使他们觉得满意


无论如何,请将视图模型特性绑定到文本框。在setter中执行过滤逻辑。将树视图绑定到单独的列表,该列表将只包含令人满意的记录。另一个选项是使用CollectionView。

在文本框上按下键时调用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);

        }
public void SearchChild()
{
如果(!string.IsNullOrEmpty(SearchFilter))
{
var ChildList=新的ObservableCollection();
foreach(FolderItems中的变量n)
{
if(n.Name.ToLower().StartsWith(SearchFilter.Trim().ToLower()))
{
添加(n);
继续;
}
var a=(n.Children).Where((x)=>x.Name.ToLower().StartsWith(SearchFilter.Trim().ToLower()).ToList();
如果(a.计数>0)
{
n、 Children=null;
n、 儿童=a;
添加(n);
}
}
SearchFolderItems=新的ObservableCollection(子列表);
NotifyOfPropertyChange(()=>SearchFolderItems);
返回;
}
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}">


是,这是一个可观察集合的树状视图。我必须只筛选父节点,不包括子节点。您的意思是像Visual Studio(比如2012)版本的解决方案资源管理器中的搜索框一样吗?是的,完全相同。我对父记录进行了筛选。我无法为孩子们实现它。好吧,那么你需要重新检查你的搜索逻辑;从根可观察集合遍历到每个节点。