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.