C# TabControl WPF MVVM new instance of the same usercontrol

I have implemented tabcontrol in a Wpf MVVM application, the tab system shows a usercontrol, but instead of creating a new instance of the usercontrol, all tabs contain the same usercontrol and a change on a single tab replicates in the others that I opened. There is a way to create a new instance of the same usercontrol or viewmodel on each new tab? I have already checked many other similar questions but could not find a situation similar to mine.

This is the code:

**ITab.cs**
namespace CommercialClient.src.Tab
{
    public interface ITab
    {
        string Name { get; set; }
        ICommand CloseCommand { get; }
        event EventHandler CloseRequested;
    }
    public abstract class Tab : ITab
    {
        public Tab()
        {
            CloseCommand = new ActionCommand(p => CloseRequested?.Invoke(this, EventArgs.Empty));
        }
        public string Name { get; set; }
        public ICommand CloseCommand { get; }
        public event EventHandler CloseRequested;
    }
   
}

**NameTab.cs**
namespace CommercialClient.src.Tab
{
    public class NameTab : Tab
    {
        public MainUserControlViewModel dt { get; set; }
        public NameTab()
        {
            Name = "CommercialTab";
            dt = new MainUserControlViewModel();
        }
    }
}

**NameTabView.xaml**
<UserControl x:Class="CommercialClient.src.Tab.NameTabView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:CommercialClient.src.Tab" xmlns:CommercialClient ="clr-namespace:CommercialClient.src"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800" Name="MM">
    <Grid>
        <CommercialClient:MainUserControl DataContext="{Binding DataContext.dt, ElementName=MM}" />
    </Grid>
</UserControl>

**NameTabView.xaml.cs**
namespace CommercialClient.src.Tab
{
    /// <summary>
    /// Interaction logic for NameTabView.xaml
    /// </summary>
    public partial class NameTabView : UserControl
    {
        public NameTabView()
        {
            InitializeComponent();
            DataContext = new NameTab();
        }
    }
}

**TabMainWindows.xaml**
<UserControl x:Class="CommercialClient.src.Tab.TabMainWindows"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:CommercialClient.src.Tab" xmlns:login="clr-namespace:VirtualLogicCommon.UserManage.Login;assembly=VirtualLogicCommon"
             xmlns:tabss="clr-namespace:CommercialClient.src"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800"
           
             Name="TUC"
            >
    <!--<UserControl.DataContext>
        <local:TabMainWindowViewModel/>
    </UserControl.DataContext>-->
    <DockPanel >
        <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
            <Button Command="{Binding DataContext.NewTabCommand, ElementName=TUC}" Margin="5">+</Button>
        </StackPanel>

        <TabControl ItemsSource="{Binding DataContext.Tabs, ElementName=TUC}" IsSynchronizedWithCurrentItem="True">
            <TabControl.Resources>
                <DataTemplate DataType="{x:Type local:NameTab}"  >
                    <local:NameTabView/>
                </DataTemplate>
            </TabControl.Resources>
            <TabControl.ItemTemplate>
                <DataTemplate DataType="{x:Type local:ITab}">
                    <TextBlock>
                        <Run Text="{Binding Name}"/>
                        <Hyperlink Command="{Binding CloseCommand}">X</Hyperlink>
                    </TextBlock>
                </DataTemplate>
            </TabControl.ItemTemplate>
        </TabControl>
    </DockPanel>
</UserControl>

**TabMainWindows.xaml.cs**
namespace CommercialClient.src.Tab
{
    /// <summary>
    /// Interaction logic for UserControl1.xaml
    /// </summary>
    public partial class TabMainWindows : UserControl
    {
        public TabMainWindows()
        {
            InitializeComponent();
            DataContext = new TabMainWindowViewModel();
        }

    }
}

**TabMainWindowsViewModel.cs**
namespace CommercialClient.src.Tab
{
    public class TabMainWindowViewModel : BaseViewModel
    {
        private readonly ObservableCollection<ITab> tabs;
        public TabMainWindowViewModel(): base("Tabs")
        {
            NewTabCommand = new ActionCommand(p => NewTab());
            tabs = new ObservableCollection<ITab>();
            tabs.CollectionChanged += Tabs_CollectionChanged;
            Tabs = tabs;
        }
        public ICommand NewTabCommand { get; }
        public ICollection<ITab> Tabs { get; }
        private void NewTab()
        {
            Tabs.Add(new NameTab());
            NotifyPropertyChanged(nameof(Tabs));
        }
        private void Tabs_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            ITab tab;
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    tab = (ITab)e.NewItems[0];
                    tab.CloseRequested += OnTabCloseRequested;
                    break;
                case NotifyCollectionChangedAction.Remove:
                    tab = (ITab)e.OldItems[0];
                    tab.CloseRequested -= OnTabCloseRequested;
                    break;
            }
        }
        private void OnTabCloseRequested(object sender, EventArgs e)
        {
            Tabs.Remove((ITab) sender);
        }
    }
}