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?