Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 优雅的UI模式,用于在分层数据上构建LOB应用程序?_Design Patterns_User Interface_Hierarchical Data - Fatal编程技术网

Design patterns 优雅的UI模式,用于在分层数据上构建LOB应用程序?

Design patterns 优雅的UI模式,用于在分层数据上构建LOB应用程序?,design-patterns,user-interface,hierarchical-data,Design Patterns,User Interface,Hierarchical Data,这是一个关于用户界面设计和编程模式的一般性问题,尽管我的问题来自我正在开发的WPF应用程序 当数据模型是层次结构且层次结构深度大于2层时,什么是干净、优雅的模式来呈现数据驱动的用户界面?我所说的最干净,是指一种只需要很少重复代码(而不是为每种数据模型类型编写一个表单)并且不需要太多繁琐的方法。例如,它可能依赖于反射。我想这就是为什么我们有嵌套的数据网格。可以在行详细信息模板中嵌套子对象。几乎所有LOB应用程序都依赖于分层数据,所以一定有人已经解决了这个问题 但问题是,如果主栅格有许多不同的子详细

这是一个关于用户界面设计和编程模式的一般性问题,尽管我的问题来自我正在开发的WPF应用程序

当数据模型是层次结构且层次结构深度大于2层时,什么是干净、优雅的模式来呈现数据驱动的用户界面?我所说的最干净,是指一种只需要很少重复代码(而不是为每种数据模型类型编写一个表单)并且不需要太多繁琐的方法。例如,它可能依赖于反射。我想这就是为什么我们有嵌套的数据网格。可以在行详细信息模板中嵌套子对象。几乎所有LOB应用程序都依赖于分层数据,所以一定有人已经解决了这个问题

但问题是,如果主栅格有许多不同的子详细栅格,该怎么办?用户界面上可能会出现杂乱的细节网格,嵌套在主网格中,并堆叠在彼此的顶部

我的一些想法可能是尝试一个嵌套在主网格中的选项卡控件。另一种方法是在一个新视图中打开一个新的数据网格,而不嵌套网格,但是再次为每个网格创建一个新视图似乎是我首先要避免的繁琐工作


除了逐个编码每个视图(和视图模型)之外,是否还有一种更干净的替代方法来在分层数据模型上构建“LOB”应用程序?

基本上,这是一个关于如何表示树的问题。在这个问题上没有太多好的共识;这是一个棘手的问题。当然,嵌套数据网格的方法是有效的,但是当您将其描述为潜在的混乱时,您就一针见血了

在某种程度上,这个问题的答案与在给定级别上交互时需要多少关于树的其余部分的信息有关。你真的需要知道树的根,以及根的所有子元素吗,当你在处理两层以下的叶子时?当然,在某些用例中,您可以这样做,在这些用例中,选择一个代表性结构是有意义的,它可以让您看到所有的子对象(如嵌套网格方法)。在其他情况下,您不需要知道太多关于树中更高级别的信息;在这些情况下,将较低数据的表示隔离到其自己的表示区域(页面)是非常有意义的

对于这个问题,有各种不同的方法。你看到了吗?这非常令人印象深刻,令人印象深刻的部分原因是数据有一种“位置”感;它利用人类自身的空间感来帮助理解复杂的数据和层次结构;缩放实际上锁定了空间方向(偶尔会偏离方向)

就你的实际问题而言,;想想其余的,特别是仇恨和期望。实际上,考虑将数据独立于演示文稿建模,然后让演示文稿成为相对较薄的层,而不是密集的视图模型。可能有一些东西需要调整,但最重要的是,如果整个viewmodel需要调整,您可以相对轻松地返回并修改它。同样,数据模型倾向于暗示对给定数据集有意义的某种结构;实际上,这是一个从数据中辨别结构并找到最适合该结构的显示模型的问题。通过不将大量工作提交给严格的viewmodel,您可以根据需要进行更改。敏捷用户界面设计,大致上


这些东西是非常主观的,它确实取决于你的组织和你的需要;每个解决方案都没有一个好的答案。祝你好运你至少问对了问题

现在我明白了viewmodel通常是我应用程序中最灵活的部分,也是我最能控制的部分。相比之下,UI控件和模型是相对静态的,尤其是当控件是第三方的时候。UI控件提供的表示选项甚至可能驱动viewmodel的设计。拥有或没有数据网格将影响应用程序的显示,并且viewmodels将相应更改。