我的DataGrid
显示List
UserPrincipals
。除了我尝试水平滚动时,一切都很好。我可以在列的中间滚动,然后程序将锁定2-3分钟,然后再允许滚动。之后,我通常可以查看列表的后半部分,但如果我滚动回到上半部分,它会再次锁定。
<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>
。运行大约需要三秒钟,然后填充DataGrid
。 ActiveDirectoryScope
和ActiveDirectorySearcher
是我的其他两个按预期运行的类。
冻结始终位于DataGrid
的完全相同的列上。这让我觉得DataGrid
一次加载了一些设定数量的列。但是,所有数据必须已经存储在内存中,因为在冻结期间内存使用量不会增加。 CPU使用率也不会增加。
我可以垂直滚动而不会出现问题,按列排序是即时的。唯一的问题是&#34; loading&#34;显示屏中列的后半部分。