Подтвердить что ты не робот

Изменение видимости интерфейса вкладки пользовательского интерфейса между отладочной и развернутой версией

У меня есть приложение WPF Mvvm-Light, которое использует элементы управления вкладками для отображения различных представлений пользователю.

Проблема:

Проблема заключается в том, что при первой загрузке программы панель управления отображает пустой. Но при отладке локально эта проблема никогда не возникает. Это приложение разрабатывается уже более года без этой проблемы, и внезапно это начало происходить. см. ниже изображение введите описание изображения здесь

HACK FIX:

Если пользователь изменяет размер своего окна, содержимое в элементе управления вкладкой обновляется и появляется, и проблема никогда не возникает, пока приложение открыто. Но эта проблема возникает в 100% случаев при первой загрузке программы и загрузке первой вкладки (что происходит одновременно)

ПОДРОБНОСТИ:

вот как я определяю свои представления, которые вставляются в элемент управления вкладками

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

и вот мой элемент управления вкладкой:

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

то в моей модели просмотра для главного окна я назначаю коллекцию элементу управления вкладкой и по умолчанию устанавливаю dashbaord в качестве первой вкладки, которая открывается таким образом (попытался включить только соответствующий код, по-видимому, больше в файле 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)

Вопрос

может кто-нибудь помочь мне разобраться, почему это происходит или предложить способ обновления пользовательского интерфейса после первой загрузки приложения.

заблаговременно

ОБНОВЛЕНИЕ 1 - 4 октября 2017 г.

Я смог воспроизвести эту проблему на моей машине разработки. Когда пользовательский интерфейс пуст, вы можете увидеть, что введите описание изображения здесь

В моем стиле управления вкладками не отображается следующий контент:

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

EDIT 2 11 октября 2017

Я установил точки останова как в xaml, так и в коде ViewModel. Я могу подтвердить, что данные ViewModel правильно инициализированы и назначены наблюдаемым объектам. Я также добавил "тестовые" текстовые блоки в свой tabItemTemplate, чтобы подтвердить, какая часть не отображается. Прямо сейчас у меня ужасный взлом изменения размера окна из кода при запуске приложения, в то время как это работает, мне все же хотелось бы выяснить, что происходит.

4b9b3361

Ответ 1

Это довольно взлом, но вы можете попробовать что-то вроде этого:

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

Имейте в виду, что это просто автоматизирует процесс изменения размера, который вы описали.

Если вы хотите сохранить несколько строк, потому что приложение будет полноэкранным после загрузки, вы можете пропустить несколько строк и сделать это вместо этого:

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