单击不同的选项卡时,Tabcontrol 中的框架总是刷新

Frames inside Tabcontrol always refreshes when clicking on Different Tabs

我使用 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 个以上的选项卡并且想要在选项卡之间切换时,内部的框架会自动刷新,因此创建了托管在内部的页面的新实例,这是我不想要的。知道为什么我会发生这种情况吗?

TabControl 在 Tabs 出现时总是重新设置 Tabs 的内容。这是设计使然。 如果您希望每个选项卡在不再被选中时保持状态,那么您需要实现自己的自定义选项卡。

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