I have a screen in xaml that contains a TabControl, this is divided into 2 tabs and each tab has a dataGrid inside. Due to the amount of data that is handled in the datagrid, the use of scrollBar is required and the client's request is that when selecting a row in a tab, it must be selected in tab 2 and that the scrollbar go down to the position where it is. the selected row, for this I modified the codeBehind with the following code. The problem that it generates for me is that when I want to lower the scrollbar in tab 1 when I have already selected a row, the scrollbar always returns to the position of the selected row without allowing it to go down or up as far as I want. Please help
XAML.cs
private void UexIndividuos_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if((DataContext as VistaTabularViewModel).SelectedUEX != null)
{
var uex = (DataContext as VistaTabularViewModel).SelectedUEX;
//tabIndividuos.IsSelected = true;
DG_Individuos.SelectedItem = uex;
DG_Individuos.UpdateLayout();
DG_Individuos.ScrollIntoView(uex);
}
}
private void UexMediciones_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if ((DataContext as VistaTabularViewModel).FilaMedicionSeleccionada != null)
{
var uex = (DataContext as VistaTabularViewModel).FilaMedicionSeleccionada;
DG_Mediciones.SelectedItem = uex;
DG_Mediciones.UpdateLayout();
DG_Mediciones.ScrollIntoView(uex);
}
}
Codigo XAML
<common:DialogWindowBase
x:Class="Biocap.View.VistaTabular.VistaTabularView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
xmlns:common="clr-namespace:Biocap.Common"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:local="clr-namespace:Biocap.View.VistaTabular"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Name="VistaTabularEnsayoChildWindow"
Title="{Binding TituloPantalla, UpdateSourceTrigger=PropertyChanged}"
Dialog:DialogParticipation.Register="{Binding}"
d:DesignHeight="450"
d:DesignWidth="800"
CloseButtonCommand="{Binding CloseButtonCommand}"
CloseByEscape="False"
ShowCloseButton="True"
mc:Ignorable="d">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded" SourceObject="{Binding ElementName=VistaTabularEnsayoChildWindow}">
<i:InvokeCommandAction Command="{Binding MantenedorLoadedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Controls:MetroContentControl
Grid.RowSpan="9"
VerticalAlignment="Top"
Panel.ZIndex="99"
Content="{Binding ErrorViewModel}" />
<TabControl Width="1100" Height="570">
<TabItem Header="{Binding HeaderTabEnsayo}" Name="tabIndividuos">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<GroupBox Margin="5" Header="Individuos" >
<DataGrid
x:Name="DG_Individuos"
AutoGenerateColumns="True"
AutoGeneratingColumn="DataGridIndividuos_AutoGeneratingColumn"
CanUserAddRows="False"
ItemsSource="{Binding IndividuosCollectionView, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding SelectedUEX, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectionMode="Extended"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.VirtualizationMode="Recycling"
IsReadOnly="{Binding Guardar_uex, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectionUnit="FullRow" SelectionChanged="UexIndividuos_SelectionChanged">
<i:Interaction.Triggers>
<i:EventTrigger EventName="BeginningEdit">
<i:InvokeCommandAction Command="{Binding CeldaBeginningEdit}" PassEventArgsToCommand="True" />
</i:EventTrigger>
<i:EventTrigger EventName="CellEditEnding">
<i:InvokeCommandAction Command="{Binding IndividuosCellEditEnding}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
</GroupBox>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
Margin="5"
Command="{Binding AgregarUnidadExperimental}"
Content="Agregar unidad experimental" />
<Button
Grid.Column="1"
Margin="5"
Command="{Binding EliminarUnidadExperimental}"
CommandParameter="{Binding ElementName=DG_Individuos}"
Content="Eliminar unidades experimentales seleccionadas"
ToolTip="Eliminar unidad experimental nueva si aún no se han guardado los cambios" />
</Grid>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
Grid.Column="0"
Margin="5"
Background="{StaticResource MahApps.Brushes.Accent}"
Command="{Binding GuardarCambiosIndividuos}"
CommandParameter="{Binding ElementName=DG_Individuos}"
Content="Guardar cambios individuos" />
<Button
Grid.Column="1"
Margin="5"
Command="{Binding DescartarYSalirCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type common:DialogWindowBase}}}"
Content="Cerrar ventana" />
</Grid>
</Grid>
</TabItem>
<TabItem Header="Mediciones" Name="tabMediciones">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="auto" />
<RowDefinition />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<GroupBox Margin="5" Header="Sesiones de medición">
<DataGrid
x:Name="DG_SesionesMedicion"
AutoGenerateColumns="True"
AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"
CanUserAddRows="False"
ItemsSource="{Binding ListaMedicionesResumenCollectionView, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding MedicionResumenSeleccionada, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedIndex="{Binding SelectFirstItem,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
SelectionMode="Single"
SelectionUnit="FullRow">
<i:Interaction.Triggers>
<i:EventTrigger EventName="BeginningEdit">
<i:InvokeCommandAction Command="{Binding CeldaBeginningEdit}" PassEventArgsToCommand="True" />
</i:EventTrigger>
<i:EventTrigger EventName="CellEditEnding">
<i:InvokeCommandAction Command="{Binding MedicionResumenCellEditEnding}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
</GroupBox>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
Margin="5"
Command="{Binding AgregarMedicionResumen}"
Content="Agregar sesión de medición" />
<Button
Grid.Column="1"
Margin="5"
Command="{Binding EliminarMedicionResumenVacia}"
Content="Eliminar sesión de medición vacía" />
</Grid>
<GroupBox
Grid.Row="2"
Margin="5"
Header="Mediciones">
<DataGrid
x:Name="DG_Mediciones"
AutoGenerateColumns="True"
AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"
CanUserAddRows="False"
CanUserReorderColumns="False"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.VirtualizationMode="Recycling"
ItemsSource="{Binding MedicionesCollectionView, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding FilaMedicionSeleccionada, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectionMode="Extended" SelectionChanged="UexMediciones_SelectionChanged">
<i:Interaction.Triggers>
<i:EventTrigger EventName="BeginningEdit">
<i:InvokeCommandAction Command="{Binding CeldaBeginningEdit}" PassEventArgsToCommand="True" />
</i:EventTrigger>
<i:EventTrigger EventName="CellEditEnding">
<i:InvokeCommandAction Command="{Binding MedicionesCellEditEnding}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
</GroupBox>
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
Margin="5"
Command="{Binding EliminarMedicionSeleccionada}"
CommandParameter="{Binding ElementName=DG_Mediciones}"
Content="Eliminar fila detalle medición seleccionada" />
<Button
Grid.Column="1"
Margin="5"
Command="{Binding ActualizarVariablesCalculadas}"
Content="Actualizar V. Calculadas" />
</Grid>
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
Margin="5"
Background="{StaticResource MahApps.Brushes.Accent}"
Command="{Binding GuardarCambiosMediciones}"
CommandParameter="{Binding ElementName=DG_Mediciones}"
Content="Guardar cambios mediciones" />
<Button
Grid.Column="1"
Margin="5"
Command="{Binding DescartarYSalirCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type common:DialogWindowBase}}}"
Content="Cerrar ventana" />
</Grid>
</Grid>
</TabItem>
</TabControl>
</Grid>
</common:DialogWindowBase>