我使用MVVM模式在WPF中实现了动态标签创建。每个标签内部都是一个框架,框架正在托管一个页面。
<TabControl Name="mainTabControl" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ObservableCollectionTabContent}" >
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}">
</TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<!--this is the body of the TabItem template-->
<DataTemplate>
<Frame NavigationUIVisibility="Hidden"
Source="{Binding FrameSource}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
我的ViewModel看起来像这样。
public class MainWindowViewModel
{
private TabContent tabContent;
public ObservableCollection<TabContent> ObservableCollectionTabContent { get; set; }
public MainWindowViewModel()
{
ObservableCollectionTabContent = new ObservableCollection<TabContent>();
}
public void NewTab(String header, String navigatePageUri)
{
tabContent = new TabContent { Header = header, FrameSource = navigatePageUri };
this.ObservableCollectionTabContent.Add(tabContent);
// Set the new tab to be the current tab
ICollectionView collectionView = CollectionViewSource.GetDefaultView(this.ObservableCollectionTabContent);
if (collectionView != null)
{
collectionView.MoveCurrentToNext();
}
}
}
public sealed class TabContent
{
public String Header { get; set; }
public String FrameSource { get; set; }
}
现在我的问题是当打开多个标签并希望在标签之间切换时,内部框架会自动刷新,从而创建内部托管的新页面实例,这是我不想要的。知道为什么会发生这种情况吗?
答案 0 :(得分:0)
TabControl ALLWAYS在进入视图时重新启动Tabs的内容。这是设计的。 如果您希望每个选项卡在不再选中时保留状态,则需要实现自己的自定义选项卡。
如果你谷歌这个问题,你会看到很多人写自己的状态选项卡控件的例子