【问题标题】:Design pattern for single window with multiple views具有多个视图的单个窗口的设计模式
【发布时间】:2014-03-24 20:44:47
【问题描述】:

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

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

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

这个项目的一个目标是让我学习 MVVM,因此非常感谢答案的 MVVM 动机!

提前致谢!


主窗口的 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>

【问题讨论】:

    标签: c# wpf xaml subviews


    【解决方案1】:

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

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

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

     OnViewLoad
     OnViewUnload
     Validate
     ...
    

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

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

    【讨论】:

    • 感谢您的回答!似乎是一个不错的方法,尽管我很惊讶以前没有该功能。我认为我会从继承一些通用视图(例如Page)开始创建 BaseView。你会推荐哪个?
    • 这听起来像是一个好的开始。内置功能和 3rd 方工具可帮助您处理管道和其他领域。但是,您必须将各个部分组合在一起并赋予其功能逻辑。
    猜你喜欢
    • 2011-05-08
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2018-05-23
    • 2017-08-13
    • 2018-03-23
    相关资源
    最近更新 更多