MMelo31
MMelo31

Reputation: 53

Reload page after button click on another page - Xamarin

I have 2 pages, one where I insert data into a Firebase database, let's call it Page2 and one where I display the Firebase Data, Page1.

I have a button click argument on Page2 where I insert data into the database but want to reload Page1 after this. It is structured like this (Page2.xaml.cs):

        void btInsert_Clicked(System.Object sender, System.EventArgs e)
    {
       //Firebase connection
       //Firebase data insertion
       //Code to reload Page1
      
    }

On my page 1 I have my database connection and display

Page1.xaml.cs:

        public Page1()
    {
        InitializeComponent();

        BindingContext = this;
        
        var collection = firebaseClient
            .Child("Childname")
            .AsObservable<MyDatabaseRecord>()
            .Subscribe((dbevent) =>
            {
                if (dbevent != null)
                {
                    DatabaseItems.Add(dbevent.Object);
                }
            });
    }

Page1.xaml:

    <StackLayout Margin="15,0,15,5" BackgroundColor="Navy">
    <CollectionView ItemsSource="{Binding DatabaseItems}">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout>
                    <Frame BackgroundColor="Blue" HorizontalOptions="Center" Margin="0,0,0,17" Padding="2" WidthRequest="350" CornerRadius="20">
                        <StackLayout BackgroundColor="Blue">
                            <Label Text="{Binding Data1}" TextColor="White" FontAttributes="Bold" HorizontalOptions="Center" Margin="0, 5, 0, 0" FontSize="20"/>
                            <Label Text="{Binding Data2}" TextColor="White" Margin="10, 0, 0, 0" FontSize="15"/>
                            <Label Text="{Binding Data3}" TextColor="White" Margin="10, 0, 0, 0" FontSize="15"/>
                            <Label Text="{Binding Data4}" TextColor="White" Margin="10, 0, 0, 0" FontSize="15"/>
                            <Label Text="{Binding Data5}" TextColor="White" Margin="10, 0, 0, 20" FontSize="15"/>
                        </StackLayout>
                    </Frame>
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</StackLayout>

How can I approach this?

Thanks in advance.

Upvotes: 0

Views: 791

Answers (1)

Alexandar May - MSFT
Alexandar May - MSFT

Reputation: 10073

There are two ways to solve this problem:

  1. Using MessagingCenter: You can use MessagingCenter.Send<MainPage>(this, "Hi"); to send.

    Then use below code to receive information:

     MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) =>
     {
     // Do something whenever the "Hi" message is received
     }); 
    

    More information about MessagingCenter can be found here: https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center

  2. You can pass the collection as a parameter when the two pages are jumped and then modify the bound collection.

For arrays of data you bind, it is recommended that you use ObservableCollection to dynamically update data.

Upvotes: 1

Related Questions