2015-08-22 92 views
0

因此,我有一個登錄頁面,其中包含一個按鈕。當你點擊這個按鈕時,一個命令會觸發,它會接收用戶名和密碼,然後關閉以獲得一個授權令牌。我想弄清楚的是如何處理命令的結果。例如,如果失敗,我想顯示一個對話框,但如果成功,我希望它導航到不同的頁面。如何導航到命令類別的其他頁面

我感到困惑的地方是我可以獲得對頁面的引用,以便我可以打開該對話框或離開。命令類具有對視圖模型的引用,但我的視圖模型是在XAML中聲明的,而不是在代碼隱藏中。或者可能以某種方式將CommandParameter綁定到視圖的一個實例?

我是否在談論這個錯誤;這聽起來臭嗎?我對XAML比較陌生,所以我不知道規範是什麼。任何幫助表示讚賞。

+0

你的意思是使用MVVM?或標準事件導向? –

+0

MVVM。我試圖完全避免代碼隱藏。 – Sinaesthetic

回答

1

導航使用MVVM通常是最複雜的部分,我建議

1.- A瀏覽枚舉與視圖的名字(的MainView,DetailsView控件)

public enum AppViews 
{ 
    MainView, 
    DetailsView 
} 

2:一個接口稱爲INavigation包含方法導航(瀏覽查看)

public interface INavigation 
{ 
    void Navigate(AppViews view); 
} 

3.-一類包含當前INavigation實例作爲靜態:

public class NavigationLocator 
{ 
    static INavigation Current { get; set; } 
} 

(這取決於如何爲您的視圖模型,PCL,窗戶等定義)

4.-在App類實現INavigation:

public void Navigate(AppViews view) 
    { 
     var type = Type.GetType("ProjectName." + view.ToString()); 

     rootFrame.Navigate(type, null); 
    } 

5.-在App構造

public App() 
    { 
    NavigationLocator.Current = this; 
    } 

6.-呼叫你的MVVM

NavigationLocator.Current.Navigate(AppViews.DetailsView); 

就是這樣。

+0

這與僅調用Window.Current.Content上的Navigate方法有什麼不同?或者我只是回答我自己的問題? – Sinaesthetic

+0

在這種情況下,您並沒有使用純MVVM,因爲您使用的是Window類,而不是使用接口對其進行抽象(設想另一個平臺,而不是Window類可以是Activity類),ViewModel將是相同的,只有View部分更改 –

+0

根框架似乎無法在App.cs中訪問,所以我基本上必須做我之前說的(Window.Current.Content)來獲取根框架 - 最大的區別是我抽象它從命令和使用定位器。那是對的嗎? – Sinaesthetic

相關問題