.net 在视觉树上行走是不好的做法吗?
最近我看到了一些关于在可视化树上行走是不好的做法()的评论,但我还没有看到或找到为什么这会是不好的做法的原因 在我正在进行的一个项目中,有相当多的树木行走,所以我想知道我是否应该费心把这一切都改成其他的东西,或者就让它保持原样 所以,我想我这里的主要问题是,如果视觉树木行走真的是一种糟糕的做法,更重要的是,如果是,为什么 另外,在哪里(如果有的话?)可以在视觉树上行走.net 在视觉树上行走是不好的做法吗?,.net,wpf,visual-tree,.net,Wpf,Visual Tree,最近我看到了一些关于在可视化树上行走是不好的做法()的评论,但我还没有看到或找到为什么这会是不好的做法的原因 在我正在进行的一个项目中,有相当多的树木行走,所以我想知道我是否应该费心把这一切都改成其他的东西,或者就让它保持原样 所以,我想我这里的主要问题是,如果视觉树木行走真的是一种糟糕的做法,更重要的是,如果是,为什么 另外,在哪里(如果有的话?)可以在视觉树上行走 遍历可视化树通常相当于打破WPF“自然”机制提供的抽象,手动强制执行框架本身应该做的事情(通过XAML声明、数据绑定等)。简单地
LayoutUpdated
事件等,这使得代码过于复杂我想说的是,首先,你会在这个问题上得到各种各样的意见 在您链接到的示例中,我想说,在这种情况下,可视化树漫游是错误的解决方案-WPF通常最好与某种MVVM或类似MVP的模式一起使用,这意味着数据绑定,如果您绑定到适当的结构,您就可以消除许多可能使用可视化树漫游所做的事情 事实上,我只是倾向于用它来做“特效”。我使用的大型内部WPF应用程序有一些可视化的树行走代码,它以可重用的方式为一些
ItemControl
s添加了一些方便的行为(使用类型参数使其工作非常有趣)
我们还将在一些附加属性的实现中遍历可视化树,这些附加属性是控制是否允许特定用户操作UI某些部分的系统的一部分。这是因为无论底层数据是什么,该系统都必须转换可视树-用户权限是一个贯穿各领域的问题,底层数据不必在每一步都担心这一问题
基本上,我们这样做只是为了对UI本身做一些事情——UI行为不能用更方便的方式来做(老实说,大多数情况下,大多数其他方式都更方便),或者根据UI绑定到的数据中不方便表达的某个因素来调整可视化树。如果是关于操作数据的,我们总是在后端数据结构或视图模型中进行操作。这取决于您为什么要遍历可视化树。有许多机制可以自动化您的视图,在大多数情况下,它们甚至足以执行非常复杂的控制 在我多年的wpf工作中,我只在创建一些非标准行为时才使用视觉树行走,而这些行为是其他方法无法做到的(或者我没有找到其他方法来实现它们)。我认为行走视觉树是一种工具,比如任何其他的反射。了解它是件好事,它有它的应用和缺点