2016-05-11 2 views
0

Ich habe die dynamische Tab-Erstellung in WPF mit dem MVVM-Muster implementiert. In jedem Tab befindet sich ein Frame und der Frame hostet eine Page.Rahmen in Tabcontrol werden immer aktualisiert, wenn auf verschiedene Registerkarten geklickt wird.

<TabControl Name="mainTabControl" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ObservableCollectionTabContent}" > 
      <TabControl.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Header}"> 
        </TextBlock> 
       </DataTemplate> 
      </TabControl.ItemTemplate> 
      <TabControl.ContentTemplate> 
       <!--this is the body of the TabItem template--> 
       <DataTemplate> 
        <Frame NavigationUIVisibility="Hidden" 
        Source="{Binding FrameSource}" /> 
       </DataTemplate> 
      </TabControl.ContentTemplate> 
     </TabControl> 

Mein ViewModel sieht so aus.

public class MainWindowViewModel 
    { 
     private TabContent tabContent; 
     public ObservableCollection<TabContent> ObservableCollectionTabContent { get; set; } 
     public MainWindowViewModel() 
     { 

      ObservableCollectionTabContent = new ObservableCollection<TabContent>(); 
     } 



     public void NewTab(String header, String navigatePageUri) 
     { 

      tabContent = new TabContent { Header = header, FrameSource = navigatePageUri }; 

      this.ObservableCollectionTabContent.Add(tabContent); 

      // Set the new tab to be the current tab 
      ICollectionView collectionView = CollectionViewSource.GetDefaultView(this.ObservableCollectionTabContent); 
      if (collectionView != null) 
      { 
       collectionView.MoveCurrentToNext(); 

      } 

     } 

    } 

     public sealed class TabContent 
    { 
      public String Header { get; set; } 
      public String FrameSource { get; set; } 

    } 

Nun mein Problem ist, wenn mehr als 1 Tabs geöffnet ist und im Inneren zwischen Tabs den Rahmen wechseln möchten automatisch aktualisiert wird, damit neue Instanzen von Seiten innerhalb gehosteten schaffen, die ich nicht will. Irgendeine Idee, warum es mir passieren könnte?

+0

Es gibt keine 'PropertyChanged' Veranstaltung in' FrameSource' Eigenschaft, so wie es immer, dass Frame ist zu sehen aktualisiert, wenn Sie auf "Tabs" klicken? – StepUp

Antwort

0

TabControl ALLWAYS re-instatiated den Inhalt von Tabs, wenn sie in Sicht kommen. Das ist Absicht. Wenn Sie möchten, dass jede der Registerkarten den Status beibehalten, wenn sie nicht mehr ausgewählt sind, müssen Sie Ihre eigenen benutzerdefinierten Registerkarten implementieren.

Wenn Sie dieses Problem google, werden Sie viele Beispiele von Menschen sehen ihre eigenen zustandsbehaftete Registerkarte Schreiben steuert

Verwandte Themen