我一直在试图隐藏TreeView的项目。我使用自定义数据类型作为从FrameworkElement继承的源(称为SettingsMenuItem)(当前是FrameworkContentElement,因为否则TreeView呈现错误)。隐藏TreeView项目
我的目标是通过这些FrameworkElements的VisibilityProperty
设置要么Collapsed
或Visible
我能够隐藏某些项目(包括子女)。我知道这可以通过从源集合中删除项目来完成。但那不是我想要的。这意味着我必须对每个集合进行镜像以便跟踪它的实际项目,绑定到每个集合以便通知Visibility
-更改并在每次更改时创建一个新集合。这很多开销。
现在我不知道如何才能做到这一点。我认为它与ItemsGenerator有关,但我没有看到覆盖它的行为的任何可能性。我认为TreeView能够检测可见性,但显然它没有。作为另一种选择,我想到了一个自定义的TreeViewItem(如果需要的话,甚至可能是TreeView) - 但是在这一点上,整个系统的抽象使我感到压力。我不知道从哪里开始,以及解决问题的实际必要性。
提示我必须自己改变或实施将是绰绰有余。一个完整的解决方案会很好。
需要查看一些代码来提出修复建议。你有没有用XAML编写的HierarchicalDataTemplate可以包含在你的问题中? –
这并不像通常那样做。通常使用ICollectionView&设置过滤器谓词来完成过滤。使用TreeView时,这会稍微复杂 - 因为您需要在每种数据类型中都有一个ICollectionView。您不应该需要从FrameworkElement继承。除非您正在推出一些与现有TreeView截然不同的疯狂自定义TreeView,并且您无法通过替换Templates来表示这种差异。但是,我几乎可以保证,你不需要这样做。 – user3690202
这就是我一直在寻找的。我已经这么想过了。我没有严格使用MVVM,但我知道使用TreeViews和其他数据视图控件并没有使用它(或至少它的某些事情)是没有意义的。无论如何,我按照您建议的方式解决了它@ user3690202:我使用了一个CollectionView,它使用每个实例中指定的代理来过滤那些应该隐藏的代理。 – SharpShade