阅读量:1
在WPF中,可以使用TreeView控件来显示节点,并根据搜索条件来显示相应的节点。
首先,你需要在WPF窗口中添加一个TreeView控件,并定义节点的数据模型。例如,假设你的数据模型是一个简单的树形结构:
public class Node { public string Name { get; set; } public ObservableCollection<Node> Children { get; set; } }
然后,在窗口的代码文件中,你可以定义一个根节点的集合,并将其作为TreeView的数据源:
public partial class MainWindow : Window { public ObservableCollection<Node> Nodes { get; set; } public MainWindow() { InitializeComponent(); Nodes = new ObservableCollection<Node> { new Node { Name = "Node 1", Children = new ObservableCollection<Node> { new Node { Name = "Node 1.1" }, new Node { Name = "Node 1.2" } } }, new Node { Name = "Node 2", Children = new ObservableCollection<Node> { new Node { Name = "Node 2.1" }, new Node { Name = "Node 2.2" } } } }; treeView.ItemsSource = Nodes; } }
接下来,在搜索按钮的点击事件中,你可以根据搜索条件来过滤节点,并重新设置TreeView的数据源:
private void SearchButton_Click(object sender, RoutedEventArgs e) { string searchKeyword = searchTextBox.Text.Trim(); if (string.IsNullOrWhiteSpace(searchKeyword)) { treeView.ItemsSource = Nodes; } else { var filteredNodes = new ObservableCollection<Node>(); FilterNodes(Nodes, filteredNodes, searchKeyword); treeView.ItemsSource = filteredNodes; } } private void FilterNodes(IEnumerable<Node> nodes, ObservableCollection<Node> filteredNodes, string searchKeyword) { foreach (var node in nodes) { if (node.Name.Contains(searchKeyword)) { filteredNodes.Add(node); } if (node.Children != null) { FilterNodes(node.Children, filteredNodes, searchKeyword); } } }
以上代码中的FilterNodes方法使用递归遍历所有节点,并将匹配搜索条件的节点添加到filteredNodes集合中。
最后,在XAML文件中,你需要为搜索按钮的点击事件添加事件处理程序:
<Button Content="搜索" Click="SearchButton_Click" />
这样,当你输入搜索条件并点击搜索按钮时,TreeView将显示相应的节点。