我有一个WPF Mvvm-Light应用程序,它使用选项卡控件向用户显示不同的视图。
我遇到的问题是,当程序首次加载时,选项卡控件显示为空。但在本地调试时,这个问题永远不会发生这个应用程序已经开发了一年多没有这个问题,突然间它开始发生。见下图
如果用户调整其窗口大小,则选项卡控件中的内容会刷新并显示,并且在打开应用程序时问题永远不会再次出现。但是这个问题在第一个程序加载和第一个标签加载(同时发生)的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)
有人可以帮我弄清楚为什么会发生这种情况,或者建议在第一次应用程序加载后刷新UI。
提前致谢
我已经能够在我的开发机器上重现这个问题。当用户界面为空白时,您可以看到XAML diagnostics tools没有显示。下图显示了正在调试的同一个应用程序,但没有XAML工具框的那个是缺少ui元素的那个。
以下内容未在我的自定义标签控件样式中呈现:
<ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" >
<ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>
我在ViewModel中的xaml和代码中都设置了断点。我可以确认ViewModel数据已正确初始化并分配给可观察对象。我还插入了&#34; test&#34;我的tabItemTemplate中的textblocks确认哪个部分没有显示。现在我有一个可怕的黑客在应用程序启动时从代码调整窗口大小,虽然这有效,我仍然想知道发生了什么。
答案 0 :(得分:2)
这很黑,但你可以尝试这样的事情:
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