Refresh Page after PopAsync in XamarinForms

0

I have a page with the expense list that contains travel information such as Gross Amount, Expense and Net Amount and also a list with the expenses of my trip. The problem is that when I edit or create a new expense, and give the PopAsync command to go back to Expense List, the updated expense list and the updated trip amounts are loaded, but only the ListView and the past information are updated by BindContext = Trip are not updated. Anyone have an idea how to update this information back to the previous page?

    Viagem _viagem;
    Movimento _movimento;
    ObservableCollection<Despesa> _listaDespesa;

    public ListaDespesaViagemPage (Viagem viagem, Movimento movimento)
    {
        InitializeComponent ();
        _viagem = viagem;
        _movimento = movimento;
    }

    private void carregarLista()
    {
        BindingContext = _viagem;
        DespesaDal despesaDal = new DespesaDal();
        _listaDespesa = new ObservableCollection<Despesa>(despesaDal.GetDespesasViagem(_viagem.ViagemId));
        ltvDespesas.ItemsSource = _listaDespesa;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        carregarLista();
    }

[Resolution]

I used another approach that eventually solved. Instead of BindingContext = _viagem and in XAML have Text="{Binding Data}" I named the label x:Name="lblData" and in event OnAppearing I passed the information to the specific label lblData.Text = _viagem.Data.ToString("dd/MM/yyyy") .

New Code is:

C #

    private void carregarTela()
    {
        lblDescricao.Text = _viagem.Descricao;
        lblData.Text =  _viagem.Data.ToString("dd/MM/yyyy");
        lblValorBruto.Text = String.Format("{0:C2}", _viagem.Valor);
        lblDespesas.Text = String.Format("{0:C2}", _viagem.ValorDespesas);
        lblLiquido.Text = String.Format("{0:C2}", _viagem.Liquido);

        DespesaDal despesaDal = new DespesaDal();
        _listaDespesa = new ObservableCollection<Despesa>(despesaDal.GetDespesasViagem(_viagem.ViagemId));
        ltvDespesas.ItemsSource = _listaDespesa;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        carregarTela();
    }

XAML

<Label x:Name="lblDescricao"/>
<Label x:Name="lblData"/>
<Label x:Name="lblValorBruto" />
<Label x:Name="lblDespesas"/>
<Label x:Name="lblLiquido"/>

Thanks to all ...

    
asked by anonymous 12.10.2017 / 02:47

1 answer

0

I've had this problem a couple of times, try setting ItemsSource to null before assigning it to the list:

private void carregarLista()
{
    BindingContext = _viagem;
    DespesaDal despesaDal = new DespesaDal();
    _listaDespesa = new ObservableCollection<Despesa>(despesaDal.GetDespesasViagem(_viagem.ViagemId));
    ltvDespesas.ItemsSource = null;
    ltvDespesas.ItemsSource = _listaDespesa;
}
    
12.10.2017 / 08:14