我有一个文本框和一个可观察集合的树视图。我需要根据文本框的文本值过滤树视图中的可观察集合。 所有列表都以匹配的文本开头显示
答案 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}">