2017-10-18 93 views
0

我正在嘗試創建一個WPF Model-View-ViewModel,它具有單獨的LoginWindow,RegistrationWindow和MainDashboardWindow。如何在多窗口WPF應用程序中切換ViewModels?

我已閱讀Rachel Lim的解決方案,使用ApplicationViewModel和包含其他視圖的ApplicationView導航MVVM,但我無法理解某些內容。

enter image description here

我打算用LoginViewModel和RegistrationViewmodel(沒有人會從BaseViewModel繼承)通過設置登錄窗口和RegistrationWindow的DataContext的,然後登錄到應用程序後開始使用MainDashboardViewModel上視圖模型的之間切換MainDashboardWindow。

這是正確的方法嗎? 如果這不是正確的方法,我該如何實現一個可以在窗口間切換的應用程序範圍的視圖模型(一次只能打開一個窗口)?

回答

0

要正確實現MVVM,您需要了解什麼是View,Model和ViewModel。

查看是不會有任何代碼的用戶界面。 View中的DataContext是ViewModel類,一個View應該與一個ViewModel相關聯。您應該通過XAML代碼設置DataContext。

模型是類包含數據和一些方法來處理該數據。我強烈建議您在爲您編程的設計模型中使用存儲庫模式。

ViewModel是您將業務方法放入其中的地方。所有ViewModel必須從BaseViewModel實現,不知道任何關於VIEW。

對於您的情況,您需要創建3個不同的視圖,3個視圖的3個ViewModels。

讓我們從您的登錄窗口開始。首先,您需要通過在Login(登錄)視圖中指定它來指定ViewModel的登錄窗口。

<Window x:Class="SampleApplication.LoginWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:SampleApplication.ViewModels" 
    Title="Login" Height="350" Width="525"> 
<Window.DataContext> 
    <local:LoginViewModel/> 
</Window.DataContext> 

在登錄窗口中有2個按鈕。一個是登錄並且是註冊。每個按鈕都必須綁定在ViewModel中的RelayCommand。通過這種方式你可以正確地實現MVVM。要在窗口之間導航,您必須關閉當前窗口並打開一個新窗口。要關閉窗口,打開窗口,只需創建一個視圖對象並致電ViewObject.Show();

相關問題