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?