当列表加载到ProgressRing
中时,我需要显示一个DataGrid
。运行应用程序时,数据已加载,但未显示ProgressRing
。我在做什么错了?
XAML:
<Grid>
<ProgressRing x:Name="CarregamentoDeContas" />
<controls:DataGrid
x:Name="DataGridDeContas"
AutoGenerateColumns="True"
ItemsSource="{x:Bind Contas}" />
</Grid>
隐藏代码:
private List<Conta> Contas;
private void ObterListaDeContas()
{
try
{
CarregamentoDeContas.IsActive = true;
Contas = ListaDeContas.ObterContas();
}
finally
{
CarregamentoDeContas.IsActive = false;
}
}
public ContasPage()
{
this.InitializeComponent();
ObterListaDeContas();
}
答案 0 :(得分:0)
数据加载过程中未显示进度环
请检查ObterListaDeContas
方法,该方法不包含异步调用,这意味着
IsActive
的{{1}}属性将直接设置为false。如果要显示进度环,可以在CarregamentoDeContas
方法中设置任务延迟,或将ObterListaDeContas
作为异步方法,然后使用await方法调用它。
ObterContas()
答案 1 :(得分:0)
您应该避免使用“异步无效”,也许会更好:
//create Task<bool>
private async Task<bool> ObterListaDeContas()
{
try
{
//ProgressRing activation
CarregamentoDeContas.IsActive = true;
//DoSomethingBig() or await Task.Delay(3000)-only for learning
return true;
}
catch
{
//catch your exceptions
return false;
}
}
private void DeactiveProgressBar(bool isDone)
{
//ProgressRing deactivation when the task is over
CarregamentoDeContas.IsActive = false;
//optional
if (isDone)
{
Debug.WriteLine("Data loaded");
//Unblock Button, DoSomething() etc...
}
else
{
Debug.WriteLine("Data NOT Loaded");
//give a warning message to the user
}
}
使用此方法:
DeactiveProgressBar(await ObterListaDeContas());
它可以与UWP应用程序一起使用。