none
Problemas Activado pestaña TabControl WPF RRS feed

  • Pregunta

  • Hola a todos,

    Estoy desarrollando una aplicación en WPF que principalmente se basa en un TabControl donde voy añadiendo distintas vistas.

    Una de las pestañas cuando se selecciona tiene que actualizar una consulta a la base de datos. Esto funciona correctamente pero antes de visualizar la pestaña ejecuta la consulta y parece que no hace nada hasta que se carga.

    Como puedo hacer que se muestre la pestaña y una vez mostrada ejecute la consulta?

    Copio una parte del código donde tengo un binding con el SelectedItem y desde la propiedad ejecuto actualizar el listado 

    value.ActualizaListado();
     <TabControl x:Name="TabControl"
                                    ItemsSource="{Binding TabItems,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
                                    Background="White"
                                    SelectedItem="{Binding SelectedItem,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                    Margin="0,20,0,0">
                            <TabControl.ItemTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="15"/>
                                            <ColumnDefinition/>
                                            <ColumnDefinition/>
                                        </Grid.ColumnDefinitions>
                                        <Border Grid.Column="0">
                                            <Border.Background>
                                                <VisualBrush Stretch="Uniform"  Visual="{Binding TextoHeaderTab,Converter={StaticResource SelectImageHeaderTabConverter}}"/>
                                            </Border.Background>
                                        </Border>
                                        <TextBlock Grid.Column="1"
                                                   Text="{Binding TextoHeaderTab,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                                   VerticalAlignment="Bottom" Margin="5,0,0,0"/>
                                        <Button Foreground="Red"
                                                Margin="5,0,0,0"
                                                BorderBrush="{x:Null}"
                                                Background="{x:Null}"
                                                Command="{Binding CloseTabCommand}"
                                                CommandParameter="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabItem}}"
                                                FontWeight="Bold"
                                                Grid.Column="2"
                                                Width="20"
                                                Visibility="{Binding IsBusy,Converter={StaticResource InverseBooleanToVisibilityConverter}}">
                                            <Rectangle Fill="Red" Grid.Column="0" Width="10" Height="10">
                                                <Rectangle.OpacityMask>
                                                    <VisualBrush Stretch="Uniform"  Visual="{StaticResource Cerrar}"/>
                                                </Rectangle.OpacityMask>
                                            </Rectangle>
                                        </Button>
                                    </Grid> 
                                </DataTemplate>
                            </TabControl.ItemTemplate>
                            <TabControl.ItemContainerStyle>
                                <Style TargetType="TabItem">
                                    <Setter Property="IsSelected" Value="true"/>
                                </Style>
                            </TabControl.ItemContainerStyle>
                        </TabControl>


         public BaseViewModel SelectedItem
            {
                get { return selectedItem; }
                set
                {
                    Set(() => SelectedItem, ref selectedItem, value);
                    if (value != null)
                    {
                        IsVisibleDocFechas = value.IsVisibleDocFechas;
                        value.ActualizaListado();
                    }
                    else
                    {
                        IsVisibleDocFechas = false;
                    }
                }
            }

    Gracias a todos.

    viernes, 6 de noviembre de 2020 10:28

Todas las respuestas

  • Hola pinta.xixon,

    Te puedes basar en esto y en esto. Considero si lo que quieres es que la consulta tarde en arrancar, puedes usar un cronometro para esperar la cantidad de segundos que tú quieras y luego iniciar la consulta, si gustas incluso puedes mostrar un mensaje de que la consulta está por comenzar utilizando el mismo cronometro, acá te dejo un ejemplo en WPF. Espero que te sea de ayuda. Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice “Marcar como Respuesta”). Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    viernes, 6 de noviembre de 2020 13:23
  • Hola Gabriel,

    Gracias por tu respuesta, pero sigo con el mismo problema. Si me suscribo al evento SelectionChanged también ejecuta primero la consulta y luego activa la pestaña.

    Lo que busco no es que la consulta tarde en arrancar, necesito que al seleccionar la pestaña primero se active y una vez activada que ejecute la consulta.

    Un saludo,

    lunes, 9 de noviembre de 2020 8:34