Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

408
Vistas
Navegación de página usando MVVM en Xamarin.Forms

Estoy trabajando en la aplicación multiplataforma xamarin.form, quiero navegar de una página a otra al hacer clic en el botón. Como no puedo hacer Navigation.PushAsync(new Page2()); en ViewModel porque solo es posible en el archivo Code-Behid. por favor sugiera alguna forma de hacer esto?

Aquí está mi vista:

 <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Calculator.Views.SignIn" xmlns:ViewModels="clr-namespace:Calculator.ViewModels;assembly=Calculator"> <ContentPage.BindingContext> <ViewModels:LocalAccountViewModel/> </ContentPage.BindingContext> <ContentPage.Content> <StackLayout> <Button Command="{Binding ContinueBtnClicked}" /> </StackLayout> </ContentPage.Content> </ContentPage>

Aquí está mi modelo de vista:

 public class LocalAccountViewModel : INotifyPropertyChanged { public LocalAccountViewModel() { this.ContinueBtnClicked = new Command(GotoPage2); } public void GotoPage2() { ///// } public ICommand ContinueBtnClicked { protected set; get; } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanges([CallerMemberName] string PropertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); } }
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Una forma es pasar la Navegación a través de VM Constructor. Dado que las páginas heredan de VisualElement , heredan directamente la propiedad de Navigation .

Código detrás del archivo:

 public class SignIn : ContentPage { public SignIn(){ InitializeComponent(); // Note the VM constructor takes now a INavigation parameter BindingContext = new LocalAccountViewModel(Navigation); } }

Luego, en su máquina virtual, agregue una propiedad INavigation y cambie el constructor para aceptar INavigation . A continuación, puede utilizar esta propiedad para la navegación:

 public class LocalAccountViewModel : INotifyPropertyChanged { public INavigation Navigation { get; set;} public LocalAccountViewModel(INavigation navigation) { this.Navigation = navigation; this.ContinueBtnClicked = new Command(async () => await GotoPage2()); } public async Task GotoPage2() { ///// await Navigation.PushAsync(new Page2()); } ... }

Tenga en cuenta un problema con su código que debe solucionar: el método GoToPage2() debe configurarse de forma async y devolver el tipo de Task . Además, el comando realizará una llamada de acción asincrónica. ¡Esto se debe a que debe navegar por la página de forma asincrónica!

¡Espero eso ayude!

about 4 years ago · Santiago Trujillo Denunciar

0

Una forma sencilla es

 this.ContinueBtnClicked = new Command(async()=>{ await Application.Current.MainPage.Navigation.PushAsync(new Page2()); });
about 4 years ago · Santiago Trujillo Denunciar

0

Desde tu máquina virtual

 public Command RegisterCommand { get { return new Command(async () => { await Application.Current.MainPage.Navigation.PushAsync(new RegisterNewUser()); }); } }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda