我在ItemsPage上有一个listview数据,当我选择一个项目时,我可以对其进行编辑并在数据库上进行更新。我的问题是,当返回ItemsPage时,我想刷新列表
我已经尝试调用方法OnAppearing来尝试在导航下的OnItemSelected中刷新,如下所示:
namespace TesteMasterDatail.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ItemsPage : ContentPage
{
ItemsViewModel viewModel;
public ItemsPage()
{
InitializeComponent();
BindingContext = viewModel = new ItemsViewModel();
}
async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
{
var item = args.SelectedItem as Item;
if (item == null)
return;
await Navigation.PushAsync(new ItemDetailPage(new ItemDetailViewModel(item)));
OnAppearing();
ItemsListView.SelectedItem = null;
}
async void AddItem_Clicked(object sender, EventArgs e)
{
await Navigation.PushModalAsync(new NavigationPage(new NewItemPage()));
}
protected override void OnAppearing()
{
base.OnAppearing();
if (viewModel.Items.Count == 0)
viewModel.LoadItemsCommand.Execute(null);
}
}
}
它没有用,因为刷新发生在版本之前
答案 0 :(得分:0)
isinstance(..)
之后导航到页面时,应为您调用 class Foo(int):
def __eq__(self, other):
return isinstance(other, Foo)
def __int__(self):
return self
-无需手动调用它。
但是,请注意,由于虚拟机已经初始化,因此您的>>> foo = Foo()
>>> foo == int(foo)
False
>>> isinstance(foo, int)
True
在这种情况下仍不会启动。
来自docs
调用PopAsync方法时,会发生以下事件:
-调用PopAsync的页面已调用其OnDisappearing覆盖。 -返回的页面将调用其OnAppearing覆盖。 -PopAsync任务返回。
答案 1 :(得分:0)
在添加新项目或在新页面中编辑项目后,您可以使用MessagingCenter刷新列表,例如:
在ItemsPage
中:
public ItemsPage()
{
InitializeComponent();
BindingContext = viewModel = new ItemsViewModel();
MessagingCenter.Subscribe<ItemsPage> (this, "Refresh", () =>
{
// refresh the list when the "Refresh" message is received
});
}
在ItemDetailPage
或NewItemPage
中,在编辑项目或添加新项目之后:
MessagingCenter.Send<ItemsPage>(this, "Refresh");
当然,您也可以通过 MessagingCenter
传递参数