TabControl dispone de controles en pestañas inactivas

Estoy usando el patrón MVVM para mi aplicación. MainWindow comprende unTabControl con elDataContext mapeado al ViewModel:

<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}" />

losWorkspaceSelector parece:

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;
  }
}

así que esoTabOne devuelve elDataTemplate. TabOne y las otras dos pestañas devuelven elDataTemplate TabTable.

Si ejecuto la aplicación y hago clic en cada una de las pestañas dos veces (1, 2, 3, 1, 2, 3) no obtengo lo que esperaba, que es


Se crea la vista de TabOne
Se crea la vista de TabTwo
Se crea la vista de TabOne
Se crea la vista de TabTwo

es decir, si elTemplateSelector devuelve un valor diferente, los controles de la pestaña existente se desechan y se crean los controles de la nueva pestaña, y si elTemplateSelector devuelve el mismo valor, no pasa nada.

¡Esto es exactamente lo que no quiero! Me gustaria elTabControl para mantener todos los controles en las pestañas, y me gustaría poder hacer algo para crear diferentes controles en el código para el caso de donde voyTabTwo aTabThree. Puedo vivir sin este último. ¿Pero cómo le digo alTabControl no tirar los controles de cada pestaña cuando no está seleccionada?

Respuestas a la pregunta(1)

Su respuesta a la pregunta