我正在为我的应用程序使用MVVM模式。的主窗口包括与映射到视图模型的一个DataContext
TabControl
:TabControl处理非活动选项卡上的控件
<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)我没有得到我所期望的,这是
塔博恩的视图中创建
TabTwo的视图中创建
塔博恩的观点是建立
TabTwo的视图中创建
也就是说,如果TemplateSelector
返回不同的值,现有标签的控件都扔掉了,新的选项卡的控件的创建,如果TemplateSelector
返回ns值相同,没有任何反应。
这正是我不想要的!我希望TabControl
能够保留选项卡上的所有控件,并且我希望能够在代码中创建不同的控件,以便从TabTwo
到TabThree
。没有后者,我可以生活。但是如何告诉TabControl
不选择每个选项卡的控件?
谢谢安德森 - 这是理由1(它只是感觉很贵)。我会顺其自然。 --Amaca – amaca 2010-02-10 18:31:53
我需要解决#1,我们有datagrids是非常昂贵的设置每个选项卡更改。我如何告诉tabcontrol单独维护标签的内容并且不卸载它们? – DarkwingDuck 2011-10-04 23:57:02
@DarkwingDuck:Telerik发现了一个黑客。不了解内存使用情况。因人而异。 http://www.pluralsight-training.net/community/blogs/eburke/archive/2009/04/30/keeping-the-wpf-tab-control-from-destroying-its-children.aspx我建议看看其中一个出色的WPF性能工具,用于查看您的perf是否在您认为的位置丢失。这里有一个链接:http://msdn.microsoft.com/en-us/library/aa969767.aspx – 2011-10-05 02:39:57