我使用MVVM模式構建我的第一個WPF應用程序。使用MVVM模式的WPF swtich視圖無導航視圖
該應用程序以登錄視圖開頭,其中包含一個登錄按鈕。
當我點擊登錄按鈕,它執行的ICommand在LoginViewModel如果登錄succeded是從服務器獲得響應。
(我建立一個基於WCF和WPF使用用戶憑據聊天)
*我想實現的是:如果登錄成功,則會切換到註冊視圖
(我知道這沒有任何意義,但它只是用於測試視圖切換)
到目前爲止,我一直在通過按鈕唸叨導航。你的理解並不是我的目標。
所有我想要的是驗證用戶,然後,裝入聊天視圖(這我沒有還,所以這就是爲什麼我mentiond在註冊查看犯規任何意義)
我有一個主窗口和XAML代碼僅包含內容控制爲了切換視圖withing網格:
<Grid>
<ContentControl Name="mainWindowContent" Content="{Binding CurrentView}"></ContentControl>
</Grid>
主窗口視圖模型是MainWinowViewModel僅包含一個ViewModelBase命名CurrentView和個ICommand使得每次CurrentView切換到不同的視圖模型:
public class MainWindowViewModel
{
// simplified properties
public ViewModelBase CurrentView { get; set; }
public ICommand ViewLoginCommand { get; }
public ICommand ViewSignUpCommand{ get; }
public MainWindowViewModel()
{
ViewLoginCommand =new MyCommand(SetCurrentViewToLoginViewModel);
ViewSignUpCommand = new MyCommand(SetCurrentViewToSignUpViewModel);
CurrentView = new LoginViewModel();
}
private void SetCurrentViewToLoginViewModel()
{
CurrentView = new LoginViewModel();
}
private void SetCurrentViewToSignUpViewModel()
{
CurrentView = new SignUpViewModel();
}
}
我分配的DataContext到MainWindowViewModel在MainWindow.CS
所有正確的模板放在App.xaml文件中,瓦特爲每個視圖模型:
<Application.Resources>
<DataTemplate DataType="{x:Type local:LoginViewModel}">
<Views:LoginView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:SignUpViewModel}">
<Views:SignUpView />
</DataTemplate>
</Application.Resources>
同樣,我想主窗口到在一個時間僅呈現1視圖不具有導航視圖一邊。
我的問題:
我如何作出這樣一旦登錄成功,將CurrentView將變爲SignUpViewModel。
我錯過了什麼嗎?我的架構是否正確?你會做任何不同的事情嗎?
我看到它的方式,它只能happpen如果不知何故LoginViewModel內,登錄成功後,它會在DataContext的執行ViewSignUpCommand 這沒有意義並不起作用。
我看不出它是如何結合在一起的。 Thx在前面爲您提供幫助!
順便說一句,請原諒我的英語。如果需要其他內容(細節等)以便看到大圖,請通知我。
是的,您需要執行該命令以在需要時從ViewModel切換視圖:按照您的要求「在登錄成功後」。爲什麼它沒有意義?你沒有展示這一點的實現,所以你不能聲稱它不工作...... –