Very simple setup: Place a datagrid in a TabItem (from a TabControl). Add contents during the SelectionChanged-Event of the TabControl dependent on the new SelectedIndex. If the datagrid is in the tab that is beeing selected, the datagrid is locked. It seemes not to be readonly or disabled but you still cannot edit it. If you add a row in a datagrid that is outside the tab with the SelectIndex everything works fine.
MainWindow.xaml
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl SelectionChanged="TabControl_SelectionChanged">
<TabItem Header="Tab1">
</TabItem>
<TabItem Header="Tab2">
<DataGrid Name="grdTexte2" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding [TEXTID]}" Header="ID" Width="50"/>
<DataGridTextColumn Binding="{Binding [TEXT]}" Header="Text"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Header="Tab3">
<DataGrid Name="grdTexte3" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding [TEXTID]}" Header="ID" Width="50"/>
<DataGridTextColumn Binding="{Binding [TEXT]}" Header="Text"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
</Grid>
MainWindow.xaml.cs
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!(sender is TabControl))
return;
TabControl control = (sender as TabControl);
if (control.SelectedIndex == 1)
{
List<object> rows = new List<object>();
Dictionary<string, object> columns = new Dictionary<string, object>();
columns["TEXTID"] = "id";
columns["TEXT"] = "TEXT";
rows.Add(columns);
grdTexte2.ItemsSource = rows;
grdTexte3.ItemsSource = rows;
}
}
}
}