在水平搜索时DataGrid会锁定

时间:2016-06-15 17:52:29

标签: c# wpf datagrid active-directory

我的DataGrid显示List UserPrincipals。除了我尝试水平滚动时,一切都很好。我可以在列的中间滚动,然后程序将锁定2-3分钟,然后再允许滚动。之后,我通常可以查看列表的后半部分,但如果我滚动回到上半部分,它会再次锁定。

XAML

<DataGrid x:Name="DataGrid" 
          AutoGenerateColumns="True" 
          HorizontalAlignment="Left" 
          Margin="10,10,0,0" 
          VerticalAlignment="Top" 
          RenderTransformOrigin="2.25,-3.615" 
          MaxHeight="9001" MaxWidth="90000000"
          ItemsSource="{Binding IsAsync=True}"/>

代码

public partial class MainWindow : Window
{
    private ActiveDirectorySearcher searcher;
    private ActiveDirectoryScope selectedScope;

    public MainWindow()
    {
        DataContext = new ActiveDirectoryScopeFetcher().Scope;
        InitializeComponent();
        selectedScope = null;
        DataGrid.EnableColumnVirtualization = true;
        DataGrid.EnableRowVirtualization = true;
    }

    private void GetUsersButton_Click(object sender, RoutedEventArgs e)
    {
        selectedScope = TreeView.SelectedItem as ActiveDirectoryScope;
        Debug.WriteLine(selectedScope);
        if (selectedScope != null)
        {
            searcher = new ActiveDirectorySearcher
            {
                Scope = selectedScope
            };
            DataGrid.ItemsSource = searcher.GetUsers();
        }
        else
        {
            MessageBox.Show("Please select a scope.");
        }
    }
}

searcher.GetUsers()方法返回List<UserPrincipal>。运行大约需要三秒钟,然后填充DataGridActiveDirectoryScopeActiveDirectorySearcher是我的其他两个按预期运行的类。

冻结始终位于DataGrid的完全相同的列上。这让我觉得DataGrid一次加载了一些设定数量的列。但是,所有数据必须已经存储在内存中,因为在冻结期间内存使用量不会增加。 CPU使用率也不会增加。

我可以垂直滚动而不会出现问题,按列排序是即时的。唯一的问题是&#34; loading&#34;显示屏中列的后半部分。

0 个答案:

没有答案