如何让TextCell的Tapped事件打开另一个页面?

时间:2017-08-21 20:03:17

标签: c# xamarin xamarin.forms

我已经定义了一个像这样的TextCell:

public partial class MyTextCell : TextCell
{
    protected override void OnBindingContextChanged()
    {
        base.OnBindingContextChanged();
        var item = BindingContext as CategoryGroupWordCountVM;
        if (item != null)
        {
            this.Text = item.Name;
            this.Detail = App.DB.GetTotalWordCountBySelectedCategories(item.Id).ToString();
            this.StyleId = "disclosure";
        }
    }
}

我添加了一个像这样的添加点击事件:

section = new TableSection("Select from Available Categories");
            foreach (var category in categoryGroups)
            {
                var cell = new CategoryGroupTextCell { BindingContext = category };
                cell.Tapped += openCategoriesPage();
                section.Add(cell);
            }
        }
        tableView.Root.Add(section);

我有一个openCategoriesPage方法:

    async void openCategoriesPage(object sender, ItemTappedEventArgs e)
    {
        if (e.Item == null) return;
        var categoriesPage = new CategoriesPage();
        var categoryGroup = e.Item as CategoryGroupWordCountVM;
        ((ListView)sender).SelectedItem = null;
        await Navigation.PushAsync(categoriesPage);
    }

但是我有一个问题,我得到一个错误说:

  

CategoryGroupPage.xaml.cs(36,36):错误CS7036:没有参数   给定对应于所需的形式参数' sender'的   ' CategoryGroupPage.openCategoriesPage(object,ItemTappedEventArgs)'

有人可以告诉我,如果我正确地打开下一页,还有什么可能是我错误的原因?

1 个答案:

答案 0 :(得分:3)

您应该仅使用方法名称(没有括号)订阅Tapped事件,如下所示:

cell.Tapped += openCategoriesPage;

与执行以下操作相同:

cell.Tapped += new EventHandler(openCategoriesPage);

编译器将为两者生成相同的IL代码,但如果您希望将来取消订阅事件处理程序(您很可能会这样做),则第一个更有意义。