ProgressRing не отображается при загрузке данных - PullRequest
1 голос
/ 13 апреля 2019

У меня есть ProgressRing, который мне нужно показать, пока список загружен в DataGrid.Когда я запускаю приложение, данные загружаются, но ProgressRing не отображается.Что я делаю не так?

XAML:

<Grid>
    <ProgressRing x:Name="CarregamentoDeContas" />

    <controls:DataGrid
        x:Name="DataGridDeContas"
        AutoGenerateColumns="True"
        ItemsSource="{x:Bind Contas}" />
</Grid>

code-behind:

    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 голосов
/ 17 апреля 2019

Вам следует избегать использования "async void", возможно, было бы лучше:

    //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.

0 голосов
/ 15 апреля 2019

ProgressRing не отображается при загрузке данных

Пожалуйста, отметьте ObterListaDeContas метод, он не содержит асинхронных вызовов, это означает, что IsActive свойство CarregamentoDeContas будет установлено как ложное напрямую. если вы хотите показать прогрессивное кольцо, вы можете установить задержку задачи в методе ObterListaDeContas или сделать ObterContas() асинхронным методом и вызвать его с помощью метода await.

private async void ObterListaDeContas()
{
    try
    {
        CarregamentoDeContas.IsActive = true;

        //The progress will last for two seconds
        await Task.Delay(2000);

    }
    finally
    {
        CarregamentoDeContas.IsActive = false;
    }
}
...