Saltar al contenido

Xamarin Forms “…DisplayAlert no existe en el contexto actual”.

Poseemos la mejor respuesta que descubrimos on line. Nosotros deseamos que te sea útil y si puedes comentarnos algo que nos pueda ayudar a perfeccionar nuestra información puedes hacerlo..

Solución:

o simplemente intenta usar:

await App.Current.MainPage.DisplayAlert("Alert", "your message", "OK");

Hay dos formas de resolver esto y me inclino por la segunda. Cerca de lo que ha dicho Edward L.

DisplayAlert es un método en una página de Xamarin.Forms… y está dentro de un static método que devuelve esa página, por lo que no tiene ninguna referencia a ella.

Así que podrías hacer esto:

using System;
using Xamarin.Forms;

namespace DataBinding_Lists

public class App

    private static Page page;
    public static Page GetMainPage ()
       
        var listView = new ListView  RowHeight = 40 ;
        listView.ItemsSource = new Person []
        
            new Person  FirstName = "Abe", LastName = "Lincoln" ,
            new Person  FirstName = "Groucho", LastName = "Marks" ,
            new Person  FirstName = "Carl", LastName = "Marks" ,
        ;

        listView.ItemTemplate = new DataTemplate(typeof(TextCell));
        listView.ItemTemplate.SetBinding(TextCell.TextProperty, "FirstName");
        listView.ItemSelected += async (sender, e) => 
            await page.DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", "");
        ;

        page = new ContentPage  
            Content = new StackLayout
            
                Padding = new Thickness (5,20,5,5),
                Spacing = 10,
                Children =  listView 
            

        ;
        return page;
    



Lo que realmente deberías hacer es crear una nueva clase que sea tu página.

Tu App.cs se convierte en esto:

using System;
using Xamarin.Forms;

namespace DataBinding_Lists

public class App

    public static Page GetMainPage ()
       
        return new PeoplePage();
    



Luego creas una nueva clase que hereda de Page:

using System;
using Xamarin.Forms;

namespace DataBinding_Lists

public class PeoplePage : Page

    public PeoplePage()
       
        var listView = new ListView  RowHeight = 40 ;
        listView.ItemsSource = new Person []
        
            new Person  FirstName = "Abe", LastName = "Lincoln" ,
            new Person  FirstName = "Groucho", LastName = "Marks" ,
            new Person  FirstName = "Carl", LastName = "Marks" ,
        ;

        listView.ItemTemplate = new DataTemplate(typeof(TextCell));
        listView.ItemTemplate.SetBinding(TextCell.TextProperty, "FirstName");
        listView.ItemSelected += async (sender, e) => 
            await DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", "");
        ;

        Content = new ContentPage  
            Content = new StackLayout
            
                Padding = new Thickness (5,20,5,5),
                Spacing = 10,
                Children =  listView 
            

        ;
    



DisplayAlert() es un método de la Page clase.

Para que su clase pueda usarlo, necesita instanciar un Page objeto e invocarlo usando ese objeto o heredar directamente de él.

Ya que dijiste que tu Person la clase es en realidad también un Page class, también puede invocarlo usando uno de sus Person objetos i.e. personObj.DisplayAlert(...)

Tal vez algo similar a lo siguiente:

var personObj = new Person();
personObj.DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", "");

Esto, por supuesto, asume que la declaración de su clase Person es algo como lo siguiente:

public class Person : Page

    ...

Obviamente, la implementación exacta dependerá de cómo estructure su código. Solo estoy siguiendo lo que puedo ver en su pregunta y asumiendo algunas cosas.

Calificaciones y reseñas

Eres capaz de sostener nuestro trabajo exponiendo un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *