如何将WPF控件拆分为更小的块?
问题是:我可以将我的DataGrid或ItemsControl拆分成更小的块来呈现控件,这样UI就不会被阻塞15秒来呈现整个控件了吗 我实际上认为render并没有阻塞UI,因为它是在不同的线程中生成的如何将WPF控件拆分为更小的块?,wpf,datagrid,rendering,itemscontrol,Wpf,Datagrid,Rendering,Itemscontrol,问题是:我可以将我的DataGrid或ItemsControl拆分成更小的块来呈现控件,这样UI就不会被阻塞15秒来呈现整个控件了吗 我实际上认为render并没有阻塞UI,因为它是在不同的线程中生成的 我的ItemsControl承载多个(最多20个)数据网格。其中一些最多可以包含100行,而另一些仅短1行。当我填写潜在的可观察到的项目集合时,我经历了严重的延迟 以下是我试图做什么的简要说明: 在UIThread中,我选择了一些数据 此数据被发送到VM 2.5. VM设置IsBusy标志,使
我的ItemsControl承载多个(最多20个)数据网格。其中一些最多可以包含100行,而另一些仅短1行。当我填写潜在的可观察到的项目集合时,我经历了严重的延迟 以下是我试图做什么的简要说明:
我认为OuterScrollViewer对于包含的控件(例如DataGrid)不需要虚拟化,因为它们具有无限的高度。打开DataGrid时,您是使用DataGrid中的滚动来导航,还是使用外部scrollviewer上的滚动?如果答案是外部的,那么DataGrid没有虚拟化。Scrollviewer控制滚动。但是我必须把鼠标指针移到滚动条上才能使它工作。如果我删除scrollviewer,则无论我使用什么itemcontainer,itemscontrol的内容都将不可滚动。
<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Column="1" Grid.Row="0"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ItemsControl
DataContext="{Binding Source={StaticResource TerminalMaskVM}}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Style="{StaticResource LoadingControl}"
ItemsSource="{Binding Source={StaticResource TerminalMaskVM}, Path=TerminalMasks}"
x:Name="MaskContainer">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander IsExpanded="True" Header="{Binding MaskTableName}">
<gui:DataGrid ItemsSource="{Binding MaskTable}"
EnableColumnVirtualization="True"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
...columns definitions, etc..
...closing tags here