单击另一个页面上的按钮后重新加载页面 - Xamarin
Reload page after button click on another page - Xamarin
我有 2 个页面,一个用于将数据插入 Firebase 数据库,我们称之为第 2 页,另一个用于显示 Firebase 数据,第 1 页。
我在 Page2 上有一个按钮单击参数,我在其中将数据插入数据库,但之后想重新加载 Page1。它的结构是这样的
(Page2.xaml.cs):
void btInsert_Clicked(System.Object sender, System.EventArgs e)
{
//Firebase connection
//Firebase data insertion
//Code to reload Page1
}
在我的第 1 页上,我有我的数据库连接和显示
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>
我该如何处理?
提前致谢。
有两种方法可以解决这个问题:
使用 MessagingCenter:
您可以使用MessagingCenter.Send<MainPage>(this, "Hi");
发送。
然后使用以下代码接收信息:
MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) =>
{
// Do something whenever the "Hi" message is received
});
有关 MessagingCenter 的更多信息可在此处找到:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center
可以在两个页面跳转时将集合作为参数传入,然后修改绑定的集合
对于绑定的数据数组,建议使用ObservableCollection动态更新数据。
我有 2 个页面,一个用于将数据插入 Firebase 数据库,我们称之为第 2 页,另一个用于显示 Firebase 数据,第 1 页。
我在 Page2 上有一个按钮单击参数,我在其中将数据插入数据库,但之后想重新加载 Page1。它的结构是这样的 (Page2.xaml.cs):
void btInsert_Clicked(System.Object sender, System.EventArgs e)
{
//Firebase connection
//Firebase data insertion
//Code to reload Page1
}
在我的第 1 页上,我有我的数据库连接和显示
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>
我该如何处理?
提前致谢。
有两种方法可以解决这个问题:
使用 MessagingCenter: 您可以使用
MessagingCenter.Send<MainPage>(this, "Hi");
发送。然后使用以下代码接收信息:
MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => { // Do something whenever the "Hi" message is received });
有关 MessagingCenter 的更多信息可在此处找到:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center
可以在两个页面跳转时将集合作为参数传入,然后修改绑定的集合
对于绑定的数据数组,建议使用ObservableCollection动态更新数据。