2011-04-12 33 views
3

我有兩個頁面,其中有類似的邏輯。加載頁面,點擊一些將顯示/隱藏其他按鈕的按鈕,繼續下一頁。當我點擊下一頁時,如果我點擊後退按鈕,我會返回上一頁。什麼決定NavigationCommands.BrowseBack是否調用頁面構造函數?

不同之處在於,當單擊後退按鈕時,一個頁面(FirstPage)將調用構造函數,該按鈕有一個調用來重置默認值。另一頁(SecondPage)沒有得到構造函數,我不知道爲什麼。

public FirstPage() 
{ 
    InitializeComponent(); 
    DisplayStuff(); 
} 

第一頁有KeepAlive設置爲False

public SecondPage(object arg1, object arg2) 
{ 
    InitializeComponent(); 
    DisplayStuff(arg1, arg2); 
} 

本頁面也有KeepAlive設置爲False。這兩個頁面不會從任何東西繼承,並且沒有任何東西會覆蓋任何屬性。我能看到的唯一區別是空的構造函數,所以我試着給SecondPage一個空的構造函數,但仍然沒有運氣。

我對WPF比較陌生(我每6個月工作一兩個小時),所以我錯過了什麼?

這是後面的按鈕,以防它是相關的。

<Button Command="{x:Static NavigationCommands.BrowseBack}" /> 

編輯:當我點擊後退按鈕時,SecondPage不保持其狀態。它只是加載一個空白頁面,因爲DisplayStuff尚未被調用。

導航代碼:

NavigateTo(new SecondPage(arg1, arg2)); 

protected void NavigateTo(Page page) 
{ 
    NavigationService.Navigate(page); 
} 
+0

它被緩存在客戶端上嗎? – 2011-04-12 20:35:17

+0

請你能在這兩頁之間寫下導航代碼。 – Homam 2011-04-12 20:37:06

+0

@Cos,不,我不這麼認爲。 @Homam,用代碼更新。導航方法非常簡單。 – Brandon 2011-04-12 20:41:25

回答

1

我創建了一個類似的示例應用程序,也有類似的行爲。我想通了,當你回到一個頁面的構造不叫,除非該頁面是在雜誌

第一頁閱讀Navigation in WPF本節:

當頁的導航回使用日誌,可以執行以下步驟:

  1. 實例化頁面(返回堆棧中的最高日記帳分錄)。

  2. 頁面被刷新爲與頁面的日記條目一起存儲的狀態。

  3. 頁面導航回。

祝你好運!

+0

感謝您的信息Homam。對於遇到此問題的任何人,將邏輯移入Loaded事件會使第二個構造函數調用變得不必要。 – Brandon 2011-04-12 21:32:12

1

閱讀Paul Stovell's article on WPF navigation後,我想顯示的東西的方式是行不通的。

導航時,如果單擊「返回」,WPF不可能知道傳遞給構造函數的值是什麼;因此它必須保持頁面活着。這裏是跟蹤輸出:

因爲WPF不能調用構造函數,所以不會。它只會保持頁面活着。

他接着提到,KeepAlive不工作,如果你不通過URI導航和LoadedUnloaded每次叫,這樣我就可以將我的所有邏輯那裏,我不需要構造在後面的導航上被調用。

相關問題