TabControl располагает элементами управления на неактивных вкладках
Я использую шаблон MVVM для моего приложения. Главное окно содержитTabControl
сDataContext
сопоставлены с 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}" />
WorkspaceSelector
похоже:
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;
}
}
чтобыTabOne
возвращаетDataTemplate
. TabOne
а две другие вкладки возвращаютDataTemplate
TabTable
.
Если я запускаю приложение и нажимаю на каждую из вкладок дважды (1, 2, 3, 1, 2, 3), я не получаю то, что ожидаю, что
Представление TabOne создано
Представление TabTwo создано
TabOne's View создан
Представление TabTwo создано
то есть еслиTemplateSelector
возвращает другое значение, элементы управления существующей вкладки выбрасываются и создаются элементы управления новой вкладки, и еслиTemplateSelector
возвращает то же значение, ничего не происходит.
Это именно то, чего я не хочу! Я хотел быTabControl
сохранить все элементы управления на вкладках, и я хотел бы иметь возможность сделать что-то о создании различных элементов управления в коде для случая, когда я иду изTabTwo
вTabThree
, Я могу жить без последнего. Но как мне сказатьTabControl
не выбрасывать элементы управления каждой вкладки, когда она не выбрана?