代码之家  ›  专栏  ›  技术社区  ›  Sharun

WPF:UI组合

  •  1
  • Sharun  · 技术社区  · 17 年前

    我正在开发一个WPF应用程序,用户界面变得有点复杂。我正在寻找如何在它生长的过程中保持它的建议。

    布局看起来像这样

    <Grid>
       <List of Objects View/>
       <Objects Relationship View/>
       <Object Details View />
       <Multiple Objects Details View/>
       <View 5 />
       <View 6 />
         :
         :
    </Grid>
    

    构建窗口时,每个视图都会被创建(可见性隐藏)并绑定到一些复杂的数据。我希望用户一次只能看到一个视图。我通过操纵可见性来实现这一点。

    但问题是,视图之间的转换不仅仅涉及翻转可见性。它涉及使用currentdata重新绑定,停止后台线程/计时器,并启动支持新选择的视图的新线程/计时器(可能还会再次绑定)。因此,我添加的每个新视图都会添加一大堆代码来处理所有可能的转换。

    有什么模式可以用来处理这种情况吗?

    还有什么方法可以避免在应用加载时创建和隐藏所有内容,并将Visibility用作控制器?

    非常感谢您的帮助。谢谢

    2 回复  |  直到 17 年前
        1
  •  2
  •   dustyburwell    17 年前

    请问您是如何允许用户在视图之间来回切换的?是组合键吗?鼠标点击?

    这并不是在回答你的问题本身,但我的建议是,这听起来像是一个标签控件的完美场景。使用WPF,它不一定要看起来像选项卡控件。

    如果使用TabControl,则可以使用TabControl中的SelectionChanged事件通知后台线程停止,并可以卸载任何需要卸载的内容。

    根据TabControl的使用方式,UI可以进行某种程度的虚拟化。这意味着,每当一个选项卡被取消选中时,该选项卡的所有UI都会被销毁,并在下次选中时重新创建。如果使用 MVVM 或者PresentationModel模式,并将ViewModels加载为TabControl的项,并将DataTemplates用于视图。但是,如果只是将TabItems放入TabControl中,并在其中包含控件,它将不会以这种方式运行。

    就图案而言,我绝对推荐 MVVM .可能需要一点时间才能理解它,但没有它我永远不会做WPF。如果你需要更多的资源或例子,请告诉我。

    编辑:

    我重读了你的问题,注意到你可能需要另一种导航方式。如果您有一些视图需要根据用户操作转换到其他视图,并且不希望所有视图都显示给用户,以便用户可以选择要查看的视图(就像TabControl一样),那么您可能需要查看这些视图 WPF Navigation .导航基本上是MS与WPF一起添加的东西,允许WPF应用中的浏览器风格导航。 This MSDN article 应该是这方面的好资源。

        2
  •  1
  •   Abe Heidebrecht    17 年前

    这听起来像是一个非常适合复合WPF(Prism)的问题。可以将主区域定义为区域,并使用SingleActiveRegion一次显示一个视图。如果创建自己的区域适配器,则可以在活动视图更改时进行所有维护。

    此外,添加新视图不需要更改宿主视图的代码。这将允许您将来在单独的程序集中部署其他视图。。。