C#WPF DataGrid提高了性能

时间:2018-02-09 08:23:30

标签: c# wpf performance xaml datagrid

在我的WPF项目中,我有一个TabControl,每个TabItem都是UserControl

<TabControl Name="tc" IsSynchronizedWithCurrentItem="True" >
    <TabControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TextBox Text="{Binding Header}" BorderThickness="0" Cursor="Arrow" Focusable="False" />
            </Grid>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate DataType="{x:Type uc:MyUserControl}">
            <ContentPresenter Content="{Binding Content}"/>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

在我的代码背后,我创建了一个ViewModelClass。 TabControl的ItemsSourceObservableCollection<MyViewModel>

public class MyViewModel
{
    public string Header { get; set; }
    public MyUserControl Content { get; set; }
}

TabItem标头绑定到MyViewModel.Header,内容为MyViewModel.MyUserControl。我的UserControl实际上是DataGrid,大约有500行和30列。以下是DataGrid的代码。

    <DataGrid Name="DG" ReadOnly="true"
              CanUserResizeColumns="False"
              EnableRowVirtualization="True" 
              EnableColumnVirtualization="True"
              VirtualizingPanel.VirtualizationMode="Recycling"
              VirtualizingPanel.IsVirtualizing="True"
              CanUserSortColumns="False"
              ScrollViewer.CanContentScroll="True"/>

我知道已经有一些帖子讨论WPF的性能,但是大多数都是几年前我已经尝试过其中的一些,例如EnableRowVirtualization,EnableColumnVirtualization,VirtualizingPanel。

其中一个是将ScrollViewer.CanContentScroll设置为False,当我这样做时,网格似乎更快但将标签切换到其他标签。这需要更长的时间。我认为它正在重新绘制DataGrid,所以我放弃了这个。

无论如何,结果并不是很好,特别是当窗口最大化时,滚动的性能实在是不可接受。

我不认为我是唯一一个面临这类问题的人。所以我想再次提出这个问题。任何人都可以给我一些改善DataGrid表现的建议吗?

0 个答案:

没有答案