TabControl verfügt über Steuerelemente auf inaktiven Registerkarten

Ich verwende das MVVM-Muster für meine App. Das Hauptfenster besteht aus aTabControl mit demDataContext Dem ViewModel zugeordnet:

<Window.Resources>
  <ResourceDictionary>
    <DataTemplate x:Key="templateMainTabControl">
      <ContentPresenter Content="{Binding Path=DisplayName}" />
    </DataTemplate>

    <local:ViewModel x:Key="VM" />
    <local:WorkspaceSelector x:Key="WorkspaceSelector" />
    <local:TabOneView x:Key="TabOneView" />
    <local:TabTableView x:Key="TabTableView" />

    <DataTemplate x:Key="TabOne">
      <local:TabOneView />
    </DataTemplate>

    <DataTemplate x:Key="TabTable">
      <local:TabTableView />
    </DataTemplate>

  </ResourceDictionary>
</Window.Resources>


<TabControl Grid.Row="0"
            DataContext="{StaticResource VM}"
            ItemsSource="{Binding Workspaces}"
            SelectedItem="{Binding SelectedWorkspace}"
            ItemTemplate="{StaticResource templateMainTabControl}"
            ContentTemplateSelector="{StaticResource WorkspaceSelector}" />

DasWorkspaceSelector sieht aus wie:

public class WorkspaceSelector : DataTemplateSelector
{
  public override DataTemplate SelectTemplate( object item, DependencyObject container )
  {
    Window win = Application.Current.MainWindow;
    Workspace w = ( Workspace ) item;
    string key = w.DisplayName.Replace( " ", "" );
    if ( key != "TabOne" )
    {
      key = "TabTable";
    }
    return win.FindResource( key ) as DataTemplate;
  }
}

damitTabOne gibt das zurückDataTemplate. TabOne und die anderen beiden Registerkarten geben die zurückDataTemplate TabTable.

Wenn ich die Anwendung ausführe und zweimal auf die Registerkarten klicke (1, 2, 3, 1, 2, 3), bekomme ich nicht das, was ich erwarte, nämlich


TabOnes Ansicht wird erstellt
Die TabTwo-Ansicht wird erstellt
TabOnes Ansicht wird erstellt
Die TabTwo-Ansicht wird erstellt

das heißt, wenn dieTemplateSelector Gibt einen anderen Wert zurück, werden die Steuerelemente der vorhandenen Registerkarte verworfen und die Steuerelemente der neuen Registerkarte erstelltTemplateSelector gibt den gleichen Wert zurück, nichts passiert.

Genau das will ich nicht! Ich hätte gerne dieTabControl um alle Steuerelemente auf den Registerkarten zu behalten, und ich möchte in der Lage sein, verschiedene Steuerelemente im Code für den Fall zu erstellen, in dem ich geheTabTwo zuTabThree. Ich kann ohne Letzteres leben. Aber wie erzähle ich dasTabControl die Steuerelemente der einzelnen Registerkarten nicht wegzuwerfen, wenn sie nicht ausgewählt sind?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage