2017-06-09 63 views
0

我使用的是頁面上的KeepAlive屬性,使我能夠導航回到它的狀態下,用戶離開它英寸時的KeepAlive =「真WPF

用戶可以防止加載事件搜索公司,在額外的頁面上查看公司的更多詳細信息,然後導航回搜索頁面,以搜索狀態留下搜索頁面。

我還利用頁面上的Loaded事件將其設置爲用戶喜歡的公司首先顯示的方式

搜索後,當你ser從詳細信息頁面返回時,Loaded事件不可避免地被觸發並且搜索被重置,回到Loaded方法中描述的狀態。

我的問題是這樣的 - 有什麼辦法可以在第一次加載頁面時觸發Loaded事件,但是當它是KeptAlive並導航回來時,Loaded事件未被觸發?

我還希望有一種方法來解除這種行爲,因爲如果用戶確實導航離開搜索頁面(即不是詳細信息頁面),我希望頁面在下次用戶導航時觸發Loaded事件到它。

編輯:

var estimatingContractsPage = new EstimatingContractsPage(selectedItem); NavigationService?.Navigate(estimatingContractsPage);

回答

2

Loaded事件將在每次Page實際加載到你的UI時被解僱。但是如果你只創建Page類的一個實例,你可以使用一個布爾標誌,以確保在事件處理的代碼只運行一次:

public partial class Page1 : Page 
{ 
    public Page1() 
    { 
     InitializeComponent(); 
     this.Loaded += Page1_Loaded; 
    } 

    private bool _isLoaded; 
    private void Page1_Loaded(object sender, RoutedEventArgs e) 
    { 
     if(!_isLoaded) 
     { 
      //Your code 

      _isLoaded = true; 
     } 
    } 
} 

另一種選擇是簡單地解開事件處理程序一旦被調用:

public Page1() 
{ 
    InitializeComponent(); 
    this.Loaded += Page1_Loaded; 
} 

private void Page1_Loaded(object sender, RoutedEventArgs e) 
{ 
    //Your code 
    this.Loaded -= Page1_Loaded; 
} 
+0

實際上一個簡單的答案謝謝。我仍然不確定我將如何處理實際導航到除了詳細信息頁面之外的其他地方 - 在這種情況下,我希望在用戶回來時將頁面「加載」。 – CBreeze

+0

解決這個問題的方法是知道何時導航到另一個頁面。你如何瀏覽頁面? – mm8

+0

檢查編輯的導航方式。我可以在導航時檢查頁面的名稱,並鉤住/解除我假設的加載的事件處理程序。我可以掛入NavigationService.Navigating事件,但我不知道如何檢查事件的目的地。 – CBreeze