Windows窗体/ WPF太大了,我怎么能将它拆分?

Mik*_*key 5 c# wpf user-interface code-behind winforms

我即将创建WPF应用程序.到目前为止,在uni中我们完成GUI的唯一方法是使用一个主窗口和一个代码隐藏文件来处理其按钮点击等.

我的问题是,随着应用程序的增长,GUI会增长,文件后面的代码大小会变得无法控制!

我已经为我的系统确定了大约15个主要用例(例如:输入详细信息,查看详细信息等...).我正在创建一个主窗口(大小:480x320),由15个单独的屏幕组成(每个用例一个).这可以通过一个居中和拉伸的TabControl来实现,它有15个TabItem.或者更可能的是它可能只是一堆分层容器,一个在另一个之上(一次只能看到一个).

关键是,有15个单独的屏幕,我的代码隐藏文件将变得庞大(更不用说xaml文件!):在状态之间玩杂耍 - 使14折叠/隐藏并使一个可见,处理15个不同屏幕的控件.

有没有办法拥有15个单独的表单,每个表单都有自己的代码隐藏文件,而不是一个表单上的15个TabItems,然后根据需要创建一个主引擎并将其废弃?当然,它应该看起来好像是一种形式,而不是15种弹出窗口.

我该如何处理?您将如何处理长达数千行的xaml和代码隐藏文件的问题?

Roh*_*est 6

如果您即将开始使用WPF,您一定要看看MVVM设计模式和命令.您还应该考虑使用依赖注入,通过IOC容器,它很容易设置,这是一个很棒的教程.

在您的示例中,可以创建出现在相关选项卡页面上的单个视图(用户控件),该视图将具有自己的相关视图模型类,该类提供数据并通过命令处理任何交互.每个视图模型都将通过IOC容器绑定到其视图,从而更容易更改用户界面的行为.


Joe*_*ite 6

你的直觉是不错的:你希望把一切都在一个窗口.将每个15"屏幕"放在自己的XAML文件中,作为用户控件或页面,你会好得多.

如果Web浏览器样式的导航对您的应用程序有意义,那么请查看Page类.如果您将应用程序的StartupUri设置为指向页面(而不是窗口),那么您将自动获得一个带有后退和前进按钮的窗口,您可以使用超链接(将NavigateUri属性设置为指向另一个页面)或方法的NavigationService导航到新的页面.

如果您不想使用"后退"和"前进"按钮,则将每个"屏幕"放在其自己的UserControl中,并将一些最小逻辑添加到主窗口以显示和隐藏它们.或者如果您正在使用MVVM,您可以设置一些魔法,只需更改Window的DataContext(或者更好的是,应用程序级ViewModel上的属性),它会自动加载并显示正确的UserControl(查看DataTemplate,或观看下面的视频).

我还强烈建议您使用MVVM尝试尽可能少地编写代码(理想情况下完全没有 - 不总是可以实现,但是通过尝试你会学到很多东西).这使您的XAML 更容易重构.如果你后来决定你的一个网格上有太多的东西,你可以将它剪切并粘贴到一个新的UserControl中,而不需要花费大量的时间来解开所有的代码隐藏.

由于听起来你不熟悉MVVM模式,这个视频可能会超出你的想象,但我不禁推荐MIX2010的演讲" 构建你自己的MVVM框架 ".这是MVVM可以做什么的大开眼界,并且对如何管理不同UserControl之间的导航有一些坚实的想法.(它还有一个指向MVVM简介的链接.)