Xamarin Forms “...DisplayAlert n'existe pas dans le contexte actuel.”
Je travaille avec Xamarin, encore nouveau pour elle, mais je vais avoir un problème que j'ai le sentiment que je ne devrais pas l'être. Voici mon problème:
using System;
using Xamarin.Forms;
namespace DataBinding_Lists
{
public class App
{
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 DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", "");
};
return new ContentPage {
Content = new StackLayout
{
Padding = new Thickness (5,20,5,5),
Spacing = 10,
Children = { listView }
}
};
}
}
}
Évidemment, j'ai une classe sur une autre page appelée "Personne". Cette classe possède deux propriétés: "Prénom" et "Nom". Quand j'ai essayer de mettre tout cela ensemble comme dans Xamarin, je reçois le message d'erreur disant: "Le nom de "DisplayAlert" n'existe pas dans le contexte actuel."
Cette erreur est vous dire que Xamarin ne sais pas ce que DisplayAlert est. Vous êtes sans doute au manque une référence à un assembly, manque un
Le DisplayAlert méthode est utilisée par "Xamarin.Les formes", qui, comme indiqué ci-dessus, je suis à l'aide. DisplayAlert est une méthode créée par et pour Xamarin, donc, si je suis en utilisant ce qu'il me dit, alors je ne sais pas pourquoi c'est encore de me donner cette erreur. (developer.xamarin.com/guides/cross-platform/xamarin-forms/...)
Oui, mais c'est une méthode de la
J'ai juste essayé ces deux idées. Ils son légitime, comme s'ils doit, mais avec les deux que j'ai essayé, il a dit la même chose: "Une référence d'objet est requise pour accéder à la non-membre statique 'Xamarin.Les formulaires.Page.DisplayAlert(string,string,string,string)' est-ce à dire qu'au lieu d'utiliser une méthode statique je doit créer un objet de l'appel à la méthode?
Ouais, il semble donc que
using
déclaration ou les deux.Le DisplayAlert méthode est utilisée par "Xamarin.Les formes", qui, comme indiqué ci-dessus, je suis à l'aide. DisplayAlert est une méthode créée par et pour Xamarin, donc, si je suis en utilisant ce qu'il me dit, alors je ne sais pas pourquoi c'est encore de me donner cette erreur. (developer.xamarin.com/guides/cross-platform/xamarin-forms/...)
Oui, mais c'est une méthode de la
Page
classe (pas sûr si c'est statique ou un membre de méthode), mais vous n'êtes ni appeler à l'aide Page
préfixe ni votre App
classe hérite de la Page
classe, de sorte qu'il n'a aucun moyen de savoir comment l'appeler. Soit vous avez à faire Page.DisplayAlert()
(si c'est une méthode statique) ou de faire votre App
classe hérite de Page
et de garder le courant de l'appel.J'ai juste essayé ces deux idées. Ils son légitime, comme s'ils doit, mais avec les deux que j'ai essayé, il a dit la même chose: "Une référence d'objet est requise pour accéder à la non-membre statique 'Xamarin.Les formulaires.Page.DisplayAlert(string,string,string,string)' est-ce à dire qu'au lieu d'utiliser une méthode statique je doit créer un objet de l'appel à la méthode?
Ouais, il semble donc que
DisplayAlert()
est un membre de la méthode. En tant que tel, vous ne pouvez pas appeler à partir d'un contexte statique. Alors oui, vous n'avez qu'à l'appeler à l'aide de l'un de vos objets, voir la réponse.
OriginalL'auteur prinsJoe | 2014-12-16
Vous devez vous connecter pour publier un commentaire.
Il y a deux méthodes pour résoudre ce problème et je me penche vers la seconde. Proche de ce que Edward L. a dit.
DisplayAlert est une méthode sur un Xamarin.Les formulaires de la Page... et vous êtes à l'intérieur d'une méthode statique qui est de retour cette page, vous n'avez donc aucune référence.
De sorte que vous pourriez faire ceci:
Ce que vous devez vraiment faire est de créer une nouvelle classe qui est votre page.
Votre Application.cs se transforme en ceci:
Ensuite, vous créez une nouvelle classe qui hérite de la Page:
en utilisant le Système;
à l'aide de Xamarin.Les formes;
OriginalL'auteur JamesMontemagno
DisplayAlert()
est une méthode de laPage
classe.Dans l'ordre pour votre classe pour pouvoir l'utiliser, il faut qu'il soit instancier un
Page
objet et à l'appeler à l'aide de cet objet ou directement héritent de celui-ci.Puisque vous avez déclaré que votre
Person
classe est en fait aussi unPage
la classe, vous pouvez également appeler à l'aide de l'un de vosPerson
objetsi.e. personObj.DisplayAlert(...)
Peut-être quelque chose de similaire à la suivante:
Cela suppose évidemment que votre Personne de la déclaration de classe va quelque chose comme ce qui suit:
Évidemment, l'exacte mise en œuvre dépendra de la façon dont vous la structure de votre code. Je vais juste par ce que je vois dans votre question, et en supposant qu'un certain nombre de choses.
OriginalL'auteur Edward L.
ou juste essayer d'utilisation :
Qui fonctionne pour moi. Veuillez noter que l'appel de cette d'autres threads, devrait être fait comme suit: l'Appareil.BeginInvokeOnMainThread (async () => attendent Application.Actuel.La page d'accueil.DisplayAlert("Mes alertes", "Mon message.", "OK") );
OriginalL'auteur Badr Bellaj