2014-03-24 45 views
1

我有一個包含多個子視圖的窗口。 例如,在啓動時,將向用戶呈現登錄屏幕,並且當用戶按下「登錄」(並且成功)時,窗口應該更新爲新視圖。具有多個視圖的單個窗口的設計模式

目前,我已經在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> 

回答

0

我想觀的繼承將是你在這個追求的朋友。您應該考慮所有視圖需要分享的最基本的操作。舉例來說,如果它是一個數據庫應用程序,那麼你可以想像有方法或事件,如:

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

對於視圖切換的基本操作可以是:

OnViewLoad 
OnViewUnload 
Validate 
... 

那我就放在所有的代碼以通用的方式轉換爲基本視圖BaseView類。在獲得基本視圖後,您可以使所有普通視圖繼承BaseView的功能。您可以通過創建一個BaseDataView:BaseView來進一步創建該模型,在該BaseView中引入通用數據庫UI操作(如驗證)。

然後,您的主窗體可以主要使用基類或超類,如((BaseView)currentView).ValidateForm()等等。

+0

感謝您的回答!似乎是一種好的方式,儘管我很驚訝功能不在之前。 我想我會開始繼承一些通用視圖(如'Page')來創建BaseView。你會推薦哪個? –

+0

這聽起來像一個好的開始。有內置的功能和第三方工具,以幫助你與水管和其他領域一起。但是,您必須將這些部分放在一起並賦予其功能邏輯。 –

相關問題