可能重复:
How to design a wpf application with multiple interfaces
我正在建立一个简报应用程序。首先,当程序启动时,会显示两个主要按钮 - “消息”和“收件人”。无论点击什么,都会显示另一个内容。
我的问题是:我应该隐藏/关闭第一个窗口并创建/显示另一个窗口或只是更改控件的可见性吗?
我有不同的想法,因为对于像我这样的小应用程序,似乎改变控件的可见性就足够了。但是,我实际上不知道边框在哪里以及应用程序是否足够小。单击“消息”后,将显示一个消息列表,其中包含各种操作选项 - 浏览,删除,编辑,添加,排序,过滤等。 另一个按钮的功能基本相同,但是对于收件人。
常规方法是什么?在我的情况下会有什么好处?
答案 0 :(得分:2)
我认为你不会考虑性能或速度,因为无论如何这都是瞬间的。
我认为正确的“方法”是拥有一个可以显示项目列表的通用控件(我在想ItemsControl
)并将其绑定到一个可观察的自定义模型对象列表。这些模型对象将包含其中的文本,并具有browse
,delete
,edit
等方法(我正在考虑Command
s)从GUI调用。当您显示一种类型的项目时,您只需将ObservableList(您在后台逻辑中创建的位置)放入DataContext中,以便ItemsControl
可以显示它。
这是通常在WPF应用程序中使用的常规MVVM方法。如果你想保持简单或你没有使用MVVM的经验(并且不想获得一些),我认为如果你改变可见性或者例如使用TabControl并将你的视图放在不同的标签中并不重要
答案 1 :(得分:1)
WPF会卸载不可见的项目,因此更改可见性以隐藏项目实际上会卸载控件,并再次显示它将重新加载它。这意味着两者之间的性能差异非常相似,因为唯一真正的区别在于创建对象本身。
我通常偏好使用一个ContentControl
,Content
绑定ActiveWindow
对象的任何内容,并将ActiveWindow
交换为需要时不同的一个。这样就不需要完全搞乱可视性或窗口管理,这使我的生活更轻松。
但那绝对没有"规则"。我通常会为应用程序流程做任何最佳工作,只有在加载/卸载控件时发现性能受到重大影响时才会担心(无论是否创建新项目或切换其可见性,都会发生这种情况)。
在这些特殊情况下,我使用customized extended TabControl
将每个项目的ContentPresenter
存储在内存中,并在需要再次显示而不是重新创建时从内存重新加载它。这修复了重绘控件的性能滞后,但它确实使应用程序使用了更多的内存,因此我只会在切换视图时发现性能问题时才使用它。
答案 2 :(得分:0)
您必须根据自己的喜好,速度或内存消耗来决定。
对于像你这样的小应用程序,我不会太担心它。有可能控制非常小,你甚至无法注意到速度或记忆的差异。