2016-01-29 74 views
0

在一个WPF应用程序,我们有必要有时创建一个包含在一个框架页面的新选项卡后..WPF - 破坏页面卸载已运行

一旦页面被打开(初始化一次),它还是似乎停留在导航历史记录中,并试图加载当时可能不相关的数据。

我已经试过的方法,包括NavigationService.RemoveBackEntry万千,但它仍然存在:-(

这是如何的标签/页面被打开

Private Sub CashFlow_Edit(sender As Object, e As RoutedEventArgs) 
    Try 
     Dim DGV As DGVx = ReportsCashFlow_Grid.FindName("CashFlow_DGV") 
     e.Handled = True 
     IsNewRecord = False 

     If DGV.SelectedItems.Count = 1 Then 
      Dim row As System.Data.DataRowView = DGV.SelectedItems(0) 
      Form_ID = row("ID") 
      Dim vName As String = row("Name") 
      Dim vTab As STC_Tabx = Application.Current.MainWindow.FindName(TabName) 
      Dim TabControl As STCx = Application.Current.MainWindow.FindName("AccountingReports_TabControl") 
      If Not vTab Is Nothing Then 
       vTab.Close() 
      End If 
      Dim MCFrame As New Frame 
      Dim MCTab As New STC_Tabx 
      With MCTab 
       .Name = TabName 
       .Header = " " & vName & " " 
       .ImageSource = ReturnImageAsString("Edit.png", 16) 
       .CloseButtonVisibility = DevComponents.WpfEditors.eTabCloseButtonVisibility.Visible 
       .TabToolTip = "View or edit the " & vName & " template" 
       .Content = MCFrame 
      End With 
      RemoveHandler MCTab.Closing, AddressOf TabControl_TabClosing 
      AddHandler MCTab.Closing, AddressOf TabControl_TabClosing 

      Dim vGrid As Grid = Application.Current.MainWindow.FindName("MainGrid_Accounting") 
      RegisterControl(vGrid, MCTab) 
      TabControl.Items.Add(MCTab) 
      Dim MCPage As New ReportCashFlow_Page 
      MCFrame.NavigationService.Navigate(MCPage) 
      LoadedTabs(TabName) 
      MCTab.IsSelected = True 


     End If 

    Catch ex As Exception 
     EmailError(ex) 
    End Try 
End Sub 

回答

0

这不是代码,我想干净一点,但它的工作原理 - 创建一个全局布尔 - 当打开的选项卡/页子是卡莱d它被设置为true,如果这是真的,加载事件将只运行加载代码 - 最后它被设置为false。

Private Sub ReportCashFlow_Page_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded 
    Try 


     If IsNewTab = False Then 
      Exit Sub 
     End If 
'Run all the loading code here 


    Catch ex As Exception 
     EmailError(ex) 
    Finally 
     IsNewTab = False 
     Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, CType(Sub() CashFlow_LoadBudget(), SendOrPostCallback), Nothing) 
     Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, CType(Sub() ToggleReserve(), SendOrPostCallback), Nothing) 
    End Try 
End Sub 
0

要删除所有的示例回条目做这样的事情:

while(NavigationService.CanGoBack) 
{ 
    NavigationService.RemoveBackEntry(); 
} 
+0

试过 - 没有效果 – gchq