Tabcontrol中的框架在单击“不同选项卡”时始终会刷新

时间:2016-05-11 13:42:44

标签: c# wpf mvvm tabcontrol

我使用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; }

    }

现在我的问题是当打开多个标签并希望在标签之间切换时,内部框架会自动刷新,从而创建内部托管的新页面实例,这是我不想要的。知道为什么会发生这种情况吗?

1 个答案:

答案 0 :(得分:0)

TabControl ALLWAYS在进入视图时重新启动Tabs的内容。这是设计的。 如果您希望每个选项卡在不再选中时保留状态,则需要实现自己的自定义选项卡。

如果你谷歌这个问题,你会看到很多人写自己的状态选项卡控件的例子