wpf - La visibilidad de control de la pestaña UI cambia entre la versión depurada y la versión implementada



vb.net mvvm (1)

Esto es bastante raro, pero podrías intentar algo como esto:

Public Sub YourFormName.OnLoad ()
    Dim CorrectFormSize As Intager = YourFormName.Size
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.Size = New Size(CorrectFormSize)
End Sub

Tenga en cuenta que esto solo automatizará el proceso de cambio de tamaño que describió.

Si quiere guardar algunas líneas porque su aplicación va a estar a pantalla completa una vez cargada, puede omitir algunas líneas y hacer esto en su lugar:

Public Sub YourFormName.OnLoad()
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.WindowState = System.Windows.Forms.FormWindowState.Maximized
End Sub

Tengo una aplicación WPF Mvvm-Light que usa controles de pestañas para mostrar diferentes vistas al usuario.

PROBLEMA:

El problema que tengo es que cuando el programa se carga por primera vez, el control de pestañas se muestra vacío. Pero cuando se depura localmente, este problema nunca ocurre. Esta aplicación ha estado en desarrollo durante más de un año sin este problema y de repente comenzó a suceder. ver abajo imagen

HACK FIX:

Si el usuario cambia el tamaño de su ventana, el contenido en el control de pestañas se actualiza y aparece, y el problema nunca vuelve a ocurrir mientras tienen abierta la aplicación. Pero este problema ocurre el 100% del tiempo en la carga del primer programa y la carga de la primera pestaña (que ocurre al mismo tiempo)

DETALLES:

aquí es cómo defino mis vistas que se insertan en el control de pestañas

 <DataTemplate DataType="{x:Type FtcViewModel:DashboardNavViewModel}">
   <FtcView:DashboardNav  />
 </DataTemplate>

y aquí está mi control de pestañas:

<TabControl  Grid.Column="1" Grid.Row="3" 
                     SelectedItem="{Binding CurrentViewModel}" 
                     ItemsSource="{Binding OpenViewModelCollection}" 
                     Style="{StaticResource TabControlStyle}" 
                     ItemContainerStyle="{StaticResource TabItemStyle}" >
        </TabControl>

luego en mi modelo de vista para la ventana principal, asigno una colección al control de pestañas y de forma predeterminada establezco el dashbaord como la primera pestaña para abrir así (traté de incluir solo el código relevante, obvio que hay más en el archivo viewModel):

Public Property OpenViewModelCollection As ObservableCollection(Of ViewModelHelper)
    Get
        Return Me._OpenViewModelCollection
    End Get
    Set(value As ObservableCollection(Of ViewModelHelper))
        If _OpenViewModelCollection Is value Then
            Return
        End If
        _OpenViewModelCollection = value
        RaisePropertyChanged(OpenViewModelCollectionPropertyName)
    End Set
End Property

Public Property CurrentViewModel As ViewModelHelper
            Get
                Return Me._CurrentViewModel
            End Get
            Set(value As ViewModelHelper)
                If _CurrentViewModel Is value Then
                    Return
                End If
                ''if change of viewmodel is not from OpenTabViewModelCommandExecute method
                If FlagOpening = False AndAlso value IsNot Nothing Then

                    If _CurrentViewModel IsNot Nothing Then
                        _CurrentViewModel.HandleNavigation(True)
                    End If

                    ''Mark NavService target VM
                    _NavService.TargetViewModelKey = value.vmKey

                    ''evaluate if naviagtion has been canceled
                    If _NavService.bCanNavigate = False Then
                        _NavService.bCanNavigate = True
                        Exit Property
                    End If
                End If
                ''if navigation not canceled, finish assigning new view model
                _CurrentViewModel = value
                RaisePropertyChanged(CurrentViewModelPropertyName)
                If _CurrentViewModel IsNot Nothing Then
                    _CurrentViewModel.RefreshModel()
                End If
            End Set
        End Property
...

'' THIS CODE IS FROM THE CONSTRUCTOR OF THE VIEW MODEL CLASS
OpenViewModelCollection.Add(_Locator.DashboardHome_VM)
CurrentViewModel = OpenViewModelCollection(0)

PREGUNTA

¿Puede alguien ayudarme a descubrir por qué sucede esto o sugerir una forma de actualizar la interfaz de usuario después de la primera carga de la aplicación?

gracias por adelantado

ACTUALIZACIÓN 1 - 4 de octubre de 2017

Pude reproducir este problema en mi máquina de desarrollo. Cuando la interfaz de usuario está en blanco, puede ver que las herramientas de diagnóstico XAML no aparecen. La imagen a continuación muestra la misma aplicación que se depura, pero la que no tiene el cuadro de herramientas XAML es la que tiene los elementos de la interfaz de usuario que faltan.

El siguiente contenido no se muestra dentro de mi estilo de control de pestañas personalizado:

<ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" >
    <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>

EDITAR 2 Oct 11 2017

Establecí puntos de interrupción tanto en el código xaml como en el ViewModel. Puedo confirmar que los datos de ViewModel están correctamente inicializados y asignados a los objetos observables. También inserté textblocks de "prueba" en mi tabItemTemplate para confirmar qué parte no se muestra. En este momento tengo un terrible truco para redimensionar la ventana desde el código al inicio de la aplicación, mientras eso funciona, aún me gustaría descubrir qué está pasando.





mvvm-light