wpf vb.net mvvm clickonce mvvm-light

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)

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.


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