在更改可见性或重新创建控件之间进行选择

时间:2012-10-17 14:45:30

标签: .net wpf user-interface

  

可能重复:
  How to design a wpf application with multiple interfaces

我正在建立一个简报应用程序。首先,当程序启动时,会显示两个主要按钮 - “消息”和“收件人”。无论点击什么,都会显示另一个内容。

我的问题是:我应该隐藏/关闭第一个窗口并创建/显示另一个窗口或只是更改控件的可见性吗?

我有不同的想法,因为对于像我这样的小应用程序,似乎改变控件的可见性就足够了。但是,我实际上不知道边框在哪里以及应用程序是否足够小。单击“消息”后,将显示一个消息列表,其中包含各种操作选项 - 浏览,删除,编辑,添加,排序,过滤等。 另一个按钮的功能基本相同,但是对于收件人。

常规方法是什么?在我的情况下会有什么好处?

3 个答案:

答案 0 :(得分:2)

我认为你不会考虑性能或速度,因为无论如何这都是瞬间的。

我认为正确的“方法”是拥有一个可以显示项目列表的通用控件(我在想ItemsControl)并将其绑定到一个可观察的自定义模型对象列表。这些模型对象将包含其中的文本,并具有browsedeleteedit等方法(我正在考虑Command s)从GUI调用。当您显示一种类型的项目时,您只需将ObservableList(您在后台逻辑中创建的位置)放入DataContext中,以便ItemsControl可以显示它。

这是通常在WPF应用程序中使用的常规MVVM方法。如果你想保持简单或你没有使用MVVM的经验(并且不想获得一些),我认为如果你改变可见性或者例如使用TabControl并将你的视图放在不同的标签中并不重要

答案 1 :(得分:1)

WPF会卸载不可见的项目,因此更改可见性以隐藏项目实际上会卸载控件,并再次显示它将重新加载它。这意味着两者之间的性能差异非常相似,因为唯一真正的区别在于创建对象本身。

我通常偏好使用一个ContentControlContent绑定ActiveWindow对象的任何内容,并将ActiveWindow交换为需要时不同的一个。这样就不需要完全搞乱可视性或窗口管理,这使我的生活更轻松。

但那绝对没有"规则"。我通常会为应用程序流程做任何最佳工作,只有在加载/卸载控件时发现性能受到重大影响时才会担心(无论是否创建新项目或切换其可见性,都会发生这种情况)。

在这些特殊情况下,我使用customized extended TabControl将每个项目的ContentPresenter存储在内存中,并在需要再次显示而不是重新创建时从内存重新加载它。这修复了重绘控件的性能滞后,但它确实使应用程序使用了更多的内存,因此我只会在切换视图时发现性能问题时才使用它。

答案 2 :(得分:0)

您必须根据自己的喜好,速度或内存消耗来决定。

  • 只需更改控件的可见性,您就可以获得最佳的速度,因为您不必为每个控件重新显示它们。
  • 当您只保留实际显示在内存中的控件时,您将获得更低的内存占用

对于像你这样的小应用程序,我不会太担心它。有可能控制非常小,你甚至无法注意到速度或记忆的差异。