如何在Xamarin表单上刷新或调用页面

时间:2019-02-21 10:25:37

标签: c# xamarin xamarin.forms

因此,我有这个应用程序,可以在其中选择汽车并查看汽车信息...我正在显示this之类的汽车。

我正在使用Rg.Plugins.Popup,因此,当我单击汽车图标时,它将打开带有“我的汽车”的弹出窗口

所以现在我面临的一个问题是,当我选择一辆车时,我想刷新我的当前页面,以便可以显示该车的信息...我正在处理车按钮,请单击下一个视图模型:

public class MyCarViewModel : ViewModelBase
    {

        public MyCarViewModel()
        {
        }
        public MyCarViewModel(INavigation navigation)
        {
            this.Navigation = navigation;
            this.SelectedCar = null;
            GetClientCars();
        }

        private Page page { get; set; }
        private List<CarInfo> _CarList;

        public List<CarInfo> CarList
        {
            get
            {
                return _CarList;
            }

            set
            {
                _CarList = value;
                OnPropertyChanged("CarList");
            }
        }

        private CarInfo _SelectedCar;

        public CarInfo SelectedCar
        {
            get
            {
                return _SelectedCar;
            }

            set
            {
                _SelectedCar = value;
                OnPropertyChanged("SelectedCar");
                if (_SelectedCar != null)
                {
                    CarSelected(_SelectedCar);
                }

            }
        }

        public INavigation Navigation { get; set; }

        private void CarSelected(CarInfo car)
        {

            App.choosedCar = car;
            PopupNavigation.Instance.PopAllAsync();
            this.SelectedCar = null;
        }
}

我希望此视图刷新

<views:BaseMainPage 
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="OficinaDigitalX.Views.CarDetails"
    xmlns:views="clr-namespace:OficinaDigitalX.Views">
    <views:BaseMainPage.Content>
        <StackLayout>
            <Label Text="{Binding VID, StringFormat='Modelo: {0:F0}'}" FontAttributes="Bold"
               FontSize="Large"/>
            <Label Text="{Binding LicencePlate, StringFormat='Matrícula: {0:F0}'}"/>
            <Label Text="{Binding Chassis, StringFormat='Chassis: {0:F0}'}"/>
            <Label Text="{Binding Km, StringFormat='Ultimos Km Registados: {0:N0}'}"/>
        </StackLayout>
    </views:BaseMainPage.Content>
</views:BaseMainPage>

和xaml.cs

public partial class CarDetails : BaseMainPage
        {

            public CarDetails(CarInfo car)
            {
                InitializeComponent();
                BindingContext = new CarDetailViewModel(this);
                App.currentPage = this;
                if (car != null)
                {
                    this.Title = "Dados de " + car.MakerandModel;
                }
                else
                {
                    this.Title = "Escolha uma Viatura";
                }
            }

        }

我在这里面临很多问题,因为我的汽车图标是我的“ BaseMainPage”的一部分,该视图由其他视图扩展(因此该图标可以显示在所有视图中)...

因此,当我单击按钮时,应用程序不知道其当前页面... 我以为我可能会使用导航堆栈来重新加载它,但是我不太清楚该怎么做... 希望你们能帮忙

3 个答案:

答案 0 :(得分:1)

嗯,从本质上讲,您不需要刷新页面或重新加载页面,只需刷新数据即可。

由于您使用的是 OnPropertyChanged (INotifyPropertyChanged),因此您已经完成了一半。 代替使用列出汽车列表,而使用 ObservableCollection CarList。

,如果您有意重新加载页面,请在关闭pop.up时保存数据并调用构造函数/重新启动页面。

希望您应该实现所寻找的目标。

答案 1 :(得分:0)

我认为您不需要重新加载页面,您需要重新加载数据。您的页面将使用数据绑定自动更新。

对我来说,您好像正在使用Prism,因此可以覆盖OnNavigatingTo方法并在每次“打开”页面时加载数据。

答案 2 :(得分:0)

我刚刚使用了MessagingCenter,并使用OnPropertyChanged对其进行了调用,这似乎可以完成工作!非常感谢!

查看模型:

OnPropertyChanged("SelectedCar");
                if (_SelectedCar != null)
                {
                    CarSelected(_SelectedCar);
                    MessagingCenter.Send(this, "Hi");
                }

其他视图模型的构造函数

MessagingCenter.Subscribe<MyCarViewModel>(this, "Hi", (sender) => {
                this.currentCar = App.choosedCar;
            });