我正在爲我的應用程序使用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