Q:

MVVM , TabControl , Referencing same content

I'm building a WPF app, using MVVM and it contains a set of tabcontrols that i referenced in the XMAL file to an observableCollection of my tabItemViewModel... the problem is that all of my tabitems contains the same thing! (  my tabs contain a text box each, and if i change the content of my textbox in one tab , i see the same in all of the other tabs!  and if i create a new tab , all of that i've edited disappear!) ,  it's like all of my tabs are related to the same view model or something like that! 
I'm using the Josh Smith sample to proceed , and i'm sure that i've followed the same philosophy and architecture!!!! 
Any help please??  
Thanks :) :)

my static ressources :

        <ResourceDictionary
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:view="clr-namespace:DealSaverMargo"
          xmlns:modelView="clr-namespace:ViewModelDealSaver;assembly=ViewModelDealSaver"
          >

            <DataTemplate DataType="{x:Type modelView:ClientCreationViewModel}">
                <view:ClientCreation />
            </DataTemplate>

            <DataTemplate DataType="{x:Type modelView:TabItemClientsListingModelView}">
                <view:ClientListing />
            </DataTemplate> (........)

            <DataTemplate x:Key="ClosableTabItemTemplate">
                <DockPanel >
                    <Button
                  Command="{Binding Path=CloseCommand}"
                Content="X"
                Cursor="Hand"
                DockPanel. Dock="Right"
                Focusable="False"
                FontFamily="Courier"
                FontSize="9"
                FontWeight="Bold"
                Margin="0,1,0,0"
                Padding="0"
                VerticalContentAlignment="Bottom"
                Width="16" Height="16"
                />
                    <ContentPresenter Content="{Binding Path=Header}"
                VerticalAlignment="Center">
                    </ContentPresenter>
                </DockPanel>
            </DataTemplate>

            <DataTemplate x:Key="TabsTemplate">
                <TabControl
              IsSynchronizedWithCurrentItem="True"
              ItemsSource="{Binding}"
              ItemTemplate="{StaticResource ClosableTabItemTemplate}"
              Margin="4"
              />
            </DataTemplate>

    </ResourceDictionary>

My MainWindowViewModel : 

public class MainWindowViewModel : ViewModelBase
{
    //Propriétés
    ObservableCollection<TabViewModel> _tabItems;

   //Propriétés publiques: 
    public ObservableCollection<TabViewModel> Workspaces
    {
        get
        {
            if (_tabItems == null)
            {
                _tabItems = new ObservableCollection<TabViewModel>();
                _tabItems. CollectionChanged += this. OnWorkspacesChanged;
            }
            return _tabItems;
        }
    }

    void OnWorkspacesChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if (e.NewItems ! = null && e.NewItems. Count ! = 0)
            foreach (TabViewModel workspace in e.NewItems)
                workspace. RequestClose += this. OnWorkspaceRequestClose;

        if (e.OldItems ! = null && e.OldItems. Count ! = 0)
            foreach (TabViewModel workspace in e.OldItems)
                workspace. RequestClose -= this. OnWorkspaceRequestClose;
    }
    void OnWorkspaceRequestClose(object sender, EventArgs e)
    {
        TabViewModel workspace = sender as TabViewModel;
        workspace. Dispose();
        this. Workspaces. Remove(workspace);
    }
    public MainWindowViewModel()
    {
        _tabItems = new ObservableCollection<TabViewModel>();
        //Assignation des commandes: 
        _clientCreationCommand = new RelayCommand(new Action<object>(ClientCreationTabCommand));
        _dealCreationCommand = new RelayCommand(new Action<object>(DealCreationTabCommand));
        _clientsManagementCommand = new RelayCommand(new Action<object>(ClientListingTabcommand));
    }
    #region //Commandes :

    public ICommand _clientCreationCommand
    {
        get;
        set;
    }

    public ICommand _dealCreationCommand
    {
        get;
        set;
    }

    public ICommand _clientsManagementCommand
    {
        get;
        set;
    }

    #endregion
    #region //Gestion des commandes :
    /// <summary>
    /// Rajout des workspaces :
    /// </summary>
    /// <param name="param"></param>
    public void ClientCreationTabCommand(object param)
    {
        TabViewModel clientsManager = new ClientCreationViewModel("Client Creation");
        _tabItems. Add(clientsManager);
        ICollectionView collection = CollectionViewSource. GetDefaultView(_tabItems);
        collection. MoveCurrentTo(clientsManager); //the corresponding view is set to active.  

    }

    public void ClientListingTabcommand(object param)
    {
        TabViewModel clientsListing = new TabItemClientsListingModelView("Client Management");
        _tabItems. Add(clientsListing);
        ICollectionView collection = CollectionViewSource. GetDefaultView(_tabItems);
        collection. MoveCurrentTo(clientsListing); //the corresponding view is set to active.  
    }
    #endregion

}

my Client Creation user control : 

     <UserControl x:Class="DealSaverMargo. ClientCreation"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

                xmlns:view="clr-namespace:DealSaverMargo. Views">
            <Grid>
                <Grid. RowDefinitions>
                    <RowDefinition Height="1*"/>
                    <RowDefinition Height="6*"/>
                    <RowDefinition Height="1*"/>
                </Grid. RowDefinitions>
                <Label Content="Deals Database" Grid. Row="0" FontSize="20" FontWeight="Bold" Background="#FFBFBFBF"></Label>

                <Grid Grid. Row="1" VerticalAlignment="Center">
                    <Grid. ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid. ColumnDefinitions>
                    <Grid. RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                    </Grid. RowDefinitions>
                    <! --Définition des elements-->
                    <Label Content="ID" HorizontalAlignment="Left" Width="90" />
                    <TextBox x:Name="ID" Grid. Column="1" Grid. Row="0" HorizontalAlignment="Stretch" Margin="3"></TextBox>
                    <Label Grid. Row="1" Content="Social Identity" HorizontalAlignment="Left" Width="90" />
                    <TextBox x:Name="socialIdentityBox" Grid. Column="1" Grid. Row="1" HorizontalAlignment="Stretch" Margin="3"></TextBox>
                    <Label Grid. Column="0" Grid. Row="2" Content="Phone Number"/>
                    <TextBox x:Name="phoneNumberBox" Grid. Column="1" Grid. Row="2" HorizontalAlignment="Stretch" Margin="3"></TextBox>
                    <Label Grid. Column="0" Grid. Row="3" Content="Mail Address"/>
                    <TextBox x:Name="mailAddressBox" Grid. Column="1" Grid. Row="3" HorizontalAlignment="Stretch" Margin="3"></TextBox>
                    <Label Grid. Column="0" Grid. Row="4" Content="Created By"/>
                    <TextBox x:Name="createdByBox" Grid. Column="1" Grid. Row="4" HorizontalAlignment="Stretch" Margin="3"></TextBox>
                </Grid>
                <Grid Grid. Row="2">
                    <Grid>
                        <Grid. ColumnDefinitions>
                            <ColumnDefinition Width="2*"></ColumnDefinition>
                            <ColumnDefinition Width="1*"></ColumnDefinition>
                            <ColumnDefinition Width="1*"></ColumnDefinition>
                        </Grid. ColumnDefinitions>
                        <Button Grid. Column="1" Margin="5" Content="Add"></Button>
                        <Button Grid. Column="2" Margin="5" Content="Cancel"></Button>
                    </Grid>
                </Grid>
            </Grid>
        </UserControl>

My client creation viewmodel :

        public class ClientCreationViewModel : TabViewModel
            {
                public ClientCreationViewModel(string header)
                    : base(header)
                {
                }
                private string _socialIdentity;
                public string SocialIdentity
                {
                    get
                    {
                        return this._socialIdentity;
                    }
                    set
                    {
                        if (_socialIdentity ! = value)
                        {
                            _socialIdentity = value;
                            OnPropertyChanged("SocialIdentity");
                        }
                    }
                }

                private string _phone;
                public string Phone
                {
                    get
                    {
                        return _phone;
                    }
                    set
                    {
                        if (value ! = _phone)
                        {
                            _phone = value;
                            OnPropertyChanged("Phone");
                        }
                    }
                }

                private string _mail;
                public string Mail
                {
                    get
                    {
                        return _mail;
                    }
                    set
                    {
                        _mail = value;
                        OnPropertyChanged("Mail");
                    }
                }

                private string _createdBy;
                public string CreatedBy
                {
                    get
                    {
                        return _createdBy;
                    }
                    set
                    {
                        if (value ! = _createdBy)
                        {
                            OnPropertyChanged("CreatedBy");
                        }
                    }
                }
            }

    and my tabviewmodel ( from which all my tabitems inherits)

            public class TabViewModel : ViewModelBase
            {

                //Fields : 
                RelayCommand _closeCommand;

                //Constructor:
                public TabViewModel(string header)
                {
                    this. Header = header;
                }

                #region CloseCommand

                /// <summary>
                /// Returns the command that, when invoked, attempts
                /// to remove this workspace from the user interface. 
                /// </summary>
                public ICommand CloseCommand
                {
                    get
                    {
                        if (_closeCommand == null)
                            _closeCommand = new RelayCommand(param => this. OnRequestClose());

                        return _closeCommand;
                    }
                }

                #endregion // CloseCommand

                #region RequestClose [event]

                /// <summary>
                /// Raised when this workspace should be removed from the UI. 
                /// </summary>
                public event EventHandler RequestClose;

                void OnRequestClose()
                {
                    EventHandler handler = this. RequestClose;
                    if (handler ! = null)
                        handler(this, EventArgs. Empty);
                }

                #endregion // RequestClose [event]

                public String Header { get; set; }

            }

The viewmodelbase is the classic modelbase which can be found everywhere in internet :D

Thanks !!!! 

@David
here is my mainwindow XXAML 
<Window. DataContext>
        <!--  Declaratively create an instance of our MainWindowVie -->
        <modelView:MainWindowViewModel></modelView:MainWindowViewModel>
    </Window. DataContext>

    <Window. Resources>
        <ResourceDictionary Source="MainWindowRessources.xaml"/>  
    </Window. Resources>
    <DockPanel>
        <Menu DockPanel. Dock="Top">
            <MenuItem Header="_Application" >
                <MenuItem Header="_Deal Creation" Command="{Binding Path=_dealCreationCommand}"/>
                <MenuItem Header="_Client Creation" Command="{Binding Path=_clientCreationCommand}" />

                <MenuItem Header="Clients _Managment" Command="{Binding Path=_clientsManagementCommand}"/>
                <MenuItem Header="_Sectors Management"/>
                <MenuItem Header="S_tatistics"/>
                <Separator></Separator>
                <MenuItem Header="_Exit"/>
            </MenuItem>

            <MenuItem Header="Help">
                <MenuItem Header="Help"/>
                <MenuItem Header="Deal Saver"/>
            </MenuItem>
        </Menu>

        <ContentControl Content="{Binding Path=Workspaces}" ContentTemplate="{StaticResource TabsTemplate}" >

        </ContentControl>
    </DockPanel>

A:

Looks like you are missing the data bindings for the Text property of the text boxes in your ClientCreation user control. 
For example:  
<TextBox x:Name="socialIdentityBox" Text="{Binding SocialIdentity, Mode=TwoWay}" Grid. Column="1" Grid. Row="1" HorizontalAlignment="Stretch" Margin="3" />

Try setting these and see what happens.