У меня есть приложение 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, чтобы подтвердить, какая часть не отображается. Прямо сейчас у меня ужасный взлом изменения размера окна из кода при запуске приложения, в то время как это работает, мне все же хотелось бы выяснить, что происходит.