Xamarin.Forms Tap Gesturer 没有响应

Posted

技术标签:

【中文标题】Xamarin.Forms Tap Gesturer 没有响应【英文标题】:Xamarin.Forms Tap Gesturer not responding 【发布时间】:2017-10-10 17:47:33 【问题描述】:

在我的 XAML 中,我有:

<Label Text="Binding DisplayName" TextColor="Blue">
   <Label.GestureRecognizers>
      <TapGestureRecognizer Command="Binding TapCommand"
                            CommandParameter="Binding URL" />
   </Label.GestureRecognizers>
</Label>

在视图模型中(并且我已经检查了绑定上下文)我有

private ICommand tapCommand;
public ICommand TapCommand

    get  return tapCommand; 


public LinkReportPageViewModel()

    PopulateLinkReport();
    tapCommand = new Command( OnTapped );


public void OnTapped( object tappedURL )

    Log.LogThis( $"Tapped on tappedURL", "LinkReportPageVM", DateTime.Now );

我希望当我点击标签时我会在 OnTapped 中遇到断点,但我没有。我错过了什么吗?

注意,这个标签在一个分组列表中。

这是基于https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/gestures/tap/

谢谢!!

【问题讨论】:

您的标签是否在嵌套的 stackLayout 中? 您的代码看起来不错,但这里真正重要的是您拥有 Command 属性的上下文。如果标签在列表中,则每个项目的 BindingContext 是列表项本身,而不是父上下文(绑定上下文默认继承自父上下文)。请发布您的 ListView xaml 代码(仅对您的问题重要),我会给您适当的答案 =) 【参考方案1】:

正如 Diego 所说,标签的绑定上下文是 ListView 绑定到的数据项的模型。尝试将其更改为:

<Label Text="Binding DisplayName" TextColor="Blue">
   <Label.GestureRecognizers>
      <TapGestureRecognizer Command="Binding Path=BindingContext.TapCommand, Source=x:Reference NameOfListView"
                            CommandParameter="Binding URL" />
   </Label.GestureRecognizers>
</Label>

同时确保你给你的 ListView 一个 x:Name

我们告诉命令它的绑定上下文是父 ListView,它绑定到包含您的命令的 ViewModel。

【讨论】:

以上是关于Xamarin.Forms Tap Gesturer 没有响应的主要内容,如果未能解决你的问题,请参考以下文章

张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用

如何使用 tapGesture (Xamarin.Forms) 从应用程序中的多个标签中删除选定的标签

PanGesture 和 Tap Gesture 之间的冲突

当 UITextField 位于 UIScrollView 内时,使用 Tap Gesture 关闭键盘的问题。

从 Tap Gesture 中获取特定的集合视图单元格

Swift 3 - 带有 Tap Gesture 的图像视图