1

可能重复:
如何设计具有多个接口的 wpf 应用程序

我正在构建一个时事通讯应用程序。首先,当程序启动时,会显示两个主要按钮——“消息”和“收件人”。无论单击什么,都会显示另一个内容。

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

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

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

4

3 回答 3

2

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

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

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

于 2012-10-17T15:10:15.443 回答
1

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

我通常的偏好是使用一个绑定到任何对象ContentControl的单一对象,并在需要时将其交换为不同的对象。这消除了完全搞乱可见性或窗口管理的需要,这让我的生活更轻松。ContentActiveWindowActiveWindow

但这绝对不是“规则”。我通常会做最适合应用程序流的任何事情,并且只有在加载/卸载控件时发现显着的性能影响时才会担心它(无论我是否创建新项目或切换其可见性都会发生这种情况)。

在那些特殊情况下,我使用自定义扩展TabControl,它将ContentPresenter每个项目的 存储在内存中,并在需要再次显示时从内存中重新加载它,而不是重新创建它。这修复了重绘控件的性能延迟,但它确实使应用程序使用更多内存,所以我只有在切换视图时真正注意到性能问题时才使用它。

于 2012-10-17T16:34:10.567 回答
0

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

  • 仅更改控件的可见性时,您将获得最佳速度,因为您不必在展示它们时重新构建它们。
  • 当您只保留那些您实际显示在内存中的控件时,您将获得更少的内存占用。

对于您这样的小型应用程序,我不会太担心。很有可能当控件真的很小时,您甚至都无法注意到速度或内存的差异。

于 2012-10-17T14:56:16.803 回答