如何控制内容页面焦点?

时间:2019-08-13 18:25:27

标签: xamarin xamarin.forms xamarin.android xamarin.ios

我在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);
        }
    }
}

它没有用,因为刷新发生在版本之前

2 个答案:

答案 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
          });
    }

ItemDetailPageNewItemPage中,在编辑项目或添加新项目之后:

 MessagingCenter.Send<ItemsPage>(this, "Refresh");

当然,您也可以通过 MessagingCenter

传递参数