我正在为我的应用程序使用MVVM模式。主窗口包括
TabControl
与
DataContext
映射到视图模型:
<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
.
禁忌
另外两个选项卡返回
数据板
TabTable
.
如果我运行应用程序并单击每个选项卡两次(1、2、3、1、2、3),我就得不到我所期望的,即
Tabone的视图已创建
创建TabTwo的视图
Tabone的视图已创建
创建TabTwo的视图
也就是说,如果
TemplateSelector
返回另一个值,放弃现有选项卡的控件并创建新选项卡的控件,如果
模板选择器
返回相同的值,不会发生任何情况。
这正是我不想要的!我想要
选项卡控件
为了让所有的控件都保持在选项卡上,我希望能够在代码中为我所处的位置创建不同的控件
TabTwo
到
TabThree
. 没有后者我也能活下去。但我该怎么告诉
选项卡控件
不选择每个选项卡时不丢弃其控件?