tôi có một cái nhìn cây giả có chứa dữ liệu này:Làm cách nào để lọc cấu trúc phân cấp wpf treeview bằng ICollectionView?
RootNode
Leaf
vein
SecondRoot
seeds
flowers
Tôi cố gắng để lọc các nút để chỉ hiển thị các nút có chứa một văn bản nào đó. Nói nếu tôi chỉ định "L", cây sẽ được lọc và chỉ hiển thị RootNode-> Leaf và SecondRoot-> flowers (vì cả hai đều chứa chữ cái L).
Tiếp theo mô hình mv-vm, tôi có một lớp cơ bản TreeViewViewModel như thế này:
public class ToolboxViewModel
{
...
readonly ObservableCollection<TreeViewItemViewModel> _treeViewItems = new ObservableCollection<TreeViewItemViewModel>();
public ObservableCollection<TreeViewItemViewModel> Headers
{
get { return _treeViewItems; }
}
private string _filterText;
public string FilterText
{
get { return _filterText; }
set
{
if (value == _filterText)
return;
_filterText = value;
ICollectionView view = CollectionViewSource.GetDefaultView(Headers);
view.Filter = obj => ((TreeViewItemViewModel)obj).ShowNode(_filterText);
}
}
...
}
Và một TreeViewItemViewModel cơ bản:
public class ToolboxItemViewModel
{
...
public string Name { get; private set; }
public ObservableCollection<TreeViewItemViewModel> Children { get; private set; }
public bool ShowNode(string filterText)
{
... return true if filterText is contained in Name or has children that contain filterText ...
}
...
}
Tất cả mọi thứ được thiết lập trong XAML vì vậy tôi thấy treeview và hộp tìm kiếm.
Khi mã này được thực hiện, bộ lọc chỉ áp dụng cho các nút Gốc không đủ. Có cách nào để làm cho bộ lọc chảy xuống trong hệ thống phân cấp của các nút sao cho vị từ của tôi được gọi cho mỗi nút? Nói cách khác, bộ lọc có thể được áp dụng cho toàn bộ TreeView không?
cậu kết thúc gì lên làm ? Bất kỳ thông tin hiệu suất nào bạn có thể chuyển tiếp hoặc giải pháp khác? –