Инициализировать представление xamarin после асинхронного метода - PullRequest
0 голосов
/ 17 января 2019

Добрый вечер всем.

Некоторое время я был в Ксамарине. Мои первые тесты довольно убедительны. Я решил попробовать создать небольшое приложение, которое извлекает информацию из базы данных через API, а затем обновлять эти данные через ListView. Когда я запускаю приложение на моем эмуляторе, все работает, но как только я устанавливаю приложение на свой телефон, оно вылетает. Я думал, что это потому, что API, но у меня есть API, который я использую, чтобы проверить логин / пароль, который работает правильно. API, который возвращает данные, рассматривает много строк о 3500/4000, может ли это быть причиной?

Итак, я передал загрузку данных в моей viewModel асинхронным методом, но теперь проблема заключается в том, что представление загружается до правильной загрузки данных. Есть ли способ инициализировать представление после загрузки данных?

Ниже моего кода.

Инициализация моей модели представления

class ManageInventViewModel
{
    public ObservableCollection<InventViewModel> InventProduct { get; set; }

    public Command<InventViewModel> UpdateCommand
    {
        get
        {
            return new Command<InventViewModel>(invent =>
            {
                var index = invent.IndexLigneInventaire;
                InventProduct.Remove(invent);
                InventProduct.Insert(index, invent);
            });
        }
    }

    public Command<InventViewModel> ResetStock
    {
        get
        {
            return new Command<InventViewModel>(invent =>
            {
                var index = InventProduct.IndexOf(invent);
                InventProduct.Remove(invent);
                invent.RealStockProduct = 0;
                InventProduct.Insert(index, invent);
            });
        }
    }

    public ManageInventViewModel()
    {
        LoadInventaire();
    }

    private async void LoadInventaire()
    {
        var listMvt = await Utils.Utils.GetListMouvementUntilDate();
        var listStock = Utils.Utils.GetStockByProduct(listMvt).Take(20);

        InventProduct = new ObservableCollection<InventViewModel>();

        var indexLine = 0;
        foreach (var stock in listStock)
        {
            var inventViewModel = new InventViewModel
            {
                LibelleProduit = stock.LibelleProduit,
                PrCodeProduit = stock.PrCodeProduit,
                UpCodeProduit = stock.UpCodeProduit,
                RealStockProduct = stock.StockTheoProdct,
                StockTheoProdct = stock.StockTheoProdct,
                IndexLigneInventaire = indexLine
            };
            ++indexLine;
            InventProduct.Add(inventViewModel);
        }
    }
}

Initializinz my view

public partial class InventPage : ContentPage
{
    public InventPage()
    {
        InitializeComponent();

        TableInvent.ItemSelected += (sender, e) =>
        {
            if (TableInvent.SelectedItem != null)
            {
                if (TableInvent.SelectedItem is InventViewModel item)
                {
                    PopupNavigation.Instance.PushAsync(new ChangeStockModal(item, this));
                }

                TableInvent.SelectedItem = null;
            }
        };
    }

    private void Reset_Stock(object sender, EventArgs e)
    {
        var input = sender as Button;
        var inventViewModel = input?.BindingContext as InventViewModel;
        var listViewModel = BindingContext as ManageInventViewModel;
        listViewModel?.ResetStock.Execute(inventViewModel);
    }

    public void Update_Stock_List(InventViewModel dataStockUpdate)
    {
        var listViewModel = BindingContext as ManageInventViewModel;
        listViewModel?.UpdateCommand.Execute(dataStockUpdate);
        PopupNavigation.Instance.PopAsync();
    }
}

Спасибо

1 Ответ

0 голосов
/ 18 января 2019

Мне удалось создать ActivityIndicator, но я не могу загрузить свои данные во время отображения экрана ожидания.

Что касается этой проблемы, я не вижу, чтобы вы использовали ActivityIndicator из своего кода, возможно, вы не обновляли свой код, я думаю, что если вы используете useActivityIndicator, вы можете связать одно свойство с ActivityIndicator IsRunning и IsVisible, тогда вы можете решить вопрос. Связанное использование ActivityIndicator шаг, вы можете посмотреть:

ActivityIndicator

...