数据加载期间未显示ProgressRing

时间:2019-04-13 13:23:51

标签: c# uwp datagrid windows-community-toolkit

当列表加载到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();
    }

2 个答案:

答案 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应用程序一起使用。