В настоящее время у меня есть TabControl с несколькими TabItems.Каждый TabItem имеет DataGrid внутри.Я хотел отформатировать эти DataGrids (цвета ячеек, ширину столбцов и т. Д.) Сразу, но я не смог, потому что все DataGrids из скрытых вкладок возвращали бы нулевые свойства.В этом случае я попытался обойти, где я бы программно (или вручную с помощью мыши) выбирал вкладки перед форматированием DataGrid.Но теперь я столкнулся с «странным» поведением:
private void LeftTabs_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Console.WriteLine(LeftTabs.SelectedIndex);
var currentDataGrid = (DataGrid)LeftTabs.SelectedContent;
Console.WriteLine(currentDataGrid.Name);
}
Выбранный индекс возвращает правильный индекс вкладки, но содержимое не обновляется.Допустим, выбрана вкладка 1, а затем я нажимаю на вкладку 2. Она возвращает мне индекс вкладки 2 и имя DataGrid вкладки 1.
Это поведение не позволяет мне редактировать DataGrid выбранной вкладки, потому что даже если я пытаюсьдоступ к нему напрямую через его объект, все свойства возвращают нуль.
Это код XAML TabControl, item и DataGrids:
<TabControl Name="LeftTabs" Margin="0,0,0,0" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionChanged="LeftTabs_SelectionChanged">
<TabItem>
<TabItem.Header>Conditions</TabItem.Header>
<DataGrid x:Name="DataGrid_Conditions" SelectedCellsChanged="DataGrid_Conditions_SelectedCellsChanged" ColumnWidth="80" ItemsSource="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectionChanged="ConditionsSelected" />
</TabItem>
<TabItem>
<TabItem.Header>Signals</TabItem.Header>
<DataGrid x:Name="DataGrid_Signals" ColumnWidth="80" ItemsSource="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectionChanged="SignalsSelected" />
</TabItem>
</TabControl>
РЕДАКТИРОВАТЬ: Чтобы быть более понятным, я минимизируюсценарий.TabItem1 - имеет DataGrid_Conditions внутри;TabItem2 - содержит DataGrid_Signals внутри.
Вот еще один код, который я пытаюсь запустить, когда вручную или программно выбираю вкладку:
DataGridRow Row = (DataGridRow)DataGrid_Signals.ItemContainerGenerator.ContainerFromIndex(ID);
Что происходит, если я нажимаю на tab2 этот кодне для Сетки tab2.Вместо этого он работает для предыдущей вкладки (1) Grid.LeftTabs.SelectedContent - единственное свойство, которое не обновляется.