Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xamarin.Forms Navigate to another page using ViewModel

I have several ContentPages and I want to navigate from one to another at the click of an element in the page. I have my ViewModel class:

 class JumpVM : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private INavigation _navigation;

        public ICommand NewPage
        {
            get
            {
                return new Command(async () =>
                {
                    await _navigation.PushAsync(new MySettingsPage());
                });
            }
        }

        public JumpVM() { }

        public JumpVM(INavigation navitation)
        {
            _navigation = navitation;
        }
    }

And this is one of my pages( for the sake of space, i put only the relevant code):

BindingContext = new JumpVM(this.Navigation);

....

 Image fbInvite = new Image
            {
                Source = ImageSource.FromResource(Constants.ASSETLOCATION + ".facebookInviteIcon.png"),
                HorizontalOptions = LayoutOptions.Center
            };
            fbInvite.GestureRecognizers.Add(new TapGestureRecognizer(sender =>
                {
                    //navigation in the method below
                    FaceboonInviteFriends();
                    fbInvite.Opacity = 0.8;
                    fbInvite.FadeTo(1);
                }));

I want when I click the image, to execute the Command in the JumpVM class and navigate to the page there. How can I do that?

like image 937
Dragos Avatar asked Feb 26 '15 10:02

Dragos


2 Answers

This is Answer for Navigating one page to another page in ViewModel concept.

public ICommand NavigationList { get; set; }

NavigationList = new Command(GetListview);  

public void  GetListview()
{
   Xamarin.Forms.Application.Current.MainPage.Navigation.PushAsync(new ListViewPerson());
}
like image 167
N.Y. Gudlanur Avatar answered Nov 12 '22 19:11

N.Y. Gudlanur


Try adding the following line after the FadeTo line: ((JumpVM)BindingContext).NewPage.Execute(null).

like image 24
Toni Petrina Avatar answered Nov 12 '22 19:11

Toni Petrina