具有多个视图的单个窗口的设计模式

时间:2014-03-24 20:44:48

标签: c# wpf xaml subviews

我有一个包含多个子视图的窗口。 例如,在启动时,将向用户显示登录屏幕,当用户按下“登录”(并且成功)时,窗口应该更新为新视图。

目前我已经在XAML(主窗口)中创建了一个窗口,然后是一个页面,它被添加到窗口的框架中。这个想法是当用户按下登录时,我通知主窗口并告诉它登录成功,它应该将视图更改为其他内容。这将是一个非常常见的任务,它将由其子视图和其他操作(例如与菜单栏的交互)触发。这是正确的做法吗?

如果是这样,我如何通知主窗口子视图已完成? 另外,我目前使用一个页面作为子视图;这是对的吗?

这个项目的一个目标是让我学习MVVM,所以非常感谢MVVM的答案!

提前致谢!


MainWindow的XAML

<Window x:Class="CAST.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        >
    <Frame Source="/LoginPage.xaml"/>
</Window>

1 个答案:

答案 0 :(得分:1)

我认为视图继承将成为你追求的朋友。您应该考虑所有视图需要共享的最基本操作。例如,如果它是一个数据库应用程序,那么您可以想象有方法或事件,例如:

BeforeInsert
AfterInsert
BeforeUpdate
AfterUpdate
BeforeCancel
AfterCancel
OnError
...
...

对于视图切换,您的基本操作可能是:

 OnViewLoad
 OnViewUnload
 Validate
 ...

然后我将所有代码以通用方式放入基本视图BaseView类中。拥有基本视图后,您可以使所有普通视图继承BaseView的功能。您可以通过创建BaseDataView:BaseView来进一步推广此模型,您可以在其中引入通用数据库UI操作,例如验证。

然后你的主表单可以主要使用基类或超类,如((BaseView)currentView).ValidateForm()等等等等。