我正在努力改进相当复杂系统的实时日志显示。目前,态势感知(通过仅显示高级事件而得到改善)和再现性(需要大量细节)之间存在显着的权衡。显而易见的方法是将细节结构化为树,并允许其显示扩展和折叠。
现有实现仅使用RichTextbox。我想使用MVVM进行重写,不仅因为它是一种最佳实践,而且还可以启用诸如“在操作正在进行时显示操作的详细信息,然后在成功完成后自动折叠它们”之类的行为。
作为进一步的复杂性,日志记录具有一些结构,需要以柱状格式显示。嵌套应仅使用描述列完成(可以通过纯缩进,如图所示,或使用树线)。
您能推荐一种将此数据结构映射到WPF模板元素的方法吗?似乎没有办法从父对象生成DataGridRow
个对象序列。并且因为行没有统一的高度(一些细节数据是多行的),尝试使用WPF树进行描述然后在其他列中同步数据的垂直位置似乎不可行。
我是否必须放弃数据绑定模型的概念,并使用更多的视图控制器设计和手动创建WPF元素,并明确存储DataGridRow
这些元素的引用内存中的树结构,并通过迭代子项并更新相关WPF元素对象的每个后代的Height属性来实现折叠和扩展?
如果我打破数据/演示文稿墙并使用命令式编码风格,是否有类似于WinForms SuspendLayout
/ ResumeLayout
的内容,我可以使用它来实现每次折叠的单个布局传递,无论高度变化了多少行?
这是使用WPF + XAML制作的树结构的快速模型。它只是一个没有任何文档结构的网格 - 所有文本元素都是网格的直接子元素,手动设置了Grid.Row
和Grid.Column
附加属性。显然,这不适合实时生成新数据和结构的实现。