Почему сетка данных блокируется при добавлении строки во время события selectedControl selectedchanged?
Очень простая настройка: Поместите сетку данных в TabItem (из TabControl). Добавьте содержимое во время SelectionChanged-Event TabControl в зависимости от нового SelectedIndex. Если сетка данных находится на выбранной вкладке, сетка данных заблокирована. Кажется, что он не только для чтения или отключен, но вы все равно не можете его редактировать. Если вы добавляете строку в сетку данных, которая находится вне вкладки с помощью SelectIndex, все работает нормально.
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;
}
}
}
}