【发布时间】:2015-02-14 08:25:36
【问题描述】:
我正在与 Xamarin 合作,对它还是新手,但我遇到了一个问题,我觉得我不应该这样。这是我的问题:
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 }
}
};
}
}
}
显然,我在另一个页面上有一个名为“Person”的课程。此类有两个属性:“FirstName”和“LastName”。当我尝试在 Xamarin 中像这样将所有这些放在一起时,我收到错误消息:“当前上下文中不存在名称 'DisplayAlert'。”
【问题讨论】:
-
该错误告诉您 Xamarin 不知道 DisplayAlert 是什么。您可能缺少对程序集的引用、缺少
using语句或两者兼而有之。 -
DisplayAlert 方法由“Xamarin.Forms”使用,如上所述,我正在使用该方法。 DisplayAlert 是由 Xamarin 创建并为 Xamarin 创建的方法,所以如果我使用它告诉我的方法,那么我不知道为什么它仍然给我这个错误。 (developer.xamarin.com/guides/cross-platform/xamarin-forms/…)
-
是的,但它是
Page类的方法(不确定它是静态方法还是成员方法),但您既没有使用Page前缀调用它,也没有使用App类继承来自Page类,所以它无法知道如何调用它。您要么必须执行Page.DisplayAlert()(如果它是静态方法),要么让您的App类继承自Page并保持当前的调用方式。 -
我刚刚尝试了这两个想法。它们听起来很合法,好像它们应该工作,但我尝试了这两个想法,它说的是同一件事:“一个对象访问非静态成员 'Xamarin.Forms.Page.DisplayAlert(string,string,string,string)' 需要引用,这是否意味着我应该创建一个对象来调用该方法,而不是使用静态方法?
-
是的,所以看起来
DisplayAlert()是一个成员方法。因此,您可能不会从静态上下文中调用它。所以是的,您必须使用您的一个对象来调用它,请参阅答案。