我有一个window
,它的一个StackPanel
名为ControlContainer
。我正在使用此代码在此UserControl
的按钮单击事件中加载StackPanel
。
private void ManageInvoicesFunc(object sender, RoutedEventArgs e)
{
ControlContainer.Children.Clear();
if (sender == null)
{
throw new ArgumentNullException(nameof(sender));
}
UserControl newControl = new ManageInvoiceControl();
ControlContainer.Children.Add(newControl);
}
此UserControl
有一个名为DataGrid
的{{1}},我正在使用此代码在Button Click事件上将数据加载到此InvoiceGrid
中。
DataGrid
我正在使用private async void FetchInvoicesDataFunc(object sender, RoutedEventArgs e)
{
ProgressBtn.Content = "Loading Data ...";
InvoiceGrid.ItemsSource = await FetchInvoiceDataAsync();
ProgressBtn.Content = "Loaded !";
}
private async Task<List<Invoice>> FetchInvoiceDataAsync()
{
List<Invoice> result;
using(var context = new Intelliventory_DBEntities() )
{
result = await context.Invoices.Where(b => b.InvoiceID <= 100).Include(x => x.Customer).ToListAsync();
}
return result;
}
。从数据库中获取数据的代码看起来是异步的。但是我仍然面临着这个问题。当单击按钮并调用Entity Framework
时,UI会持续几秒钟或更长时间。然后,它变为正常,但是当ManageInvoicesFunc
中的数据即将加载时,UI再次变得无响应。最后,在加载数据时,UI是Kinda响应式的,但是DataGrid
是Kinda响应式的,这导致UI变为响应式。我只加载100条记录。
请帮助我,代码或UI设计有什么问题?
我正在加载的数据
答案 0 :(得分:0)
只是帮助别人!问题不在于此异步代码,而在于DataGrid本身。 DataGrid
位于使Virtualization
被禁用的堆栈面板中。加DataGrid
应该已经定义了高度,并且不能在ScrollView
内,它将正常工作!