我在ListView中使用了TapGestureRecognizer,其中包含Tapped Event handler。 我想从 Span 传递到属性背后的代码,如下所示:
XAML
<ListView ItemsSource="{Binding GetCases}" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Margin="20,0,20,0">
<Label Text="Case Reference:" FontSize="14" TextColor="Green"/>
<Label FontSize="12" TextColor="Blue" FontAttributes="Bold">
<Label.FormattedText>
<FormattedString>
<Span Text="{Binding Ref}" TextColor="Blue" TextDecorations="Underline">
<Span.GestureRecognizers>
<TapGestureRecognizer Tapped="TapGestureRecognizer_OnTapped" NumberOfTapsRequired="1" />
</Span.GestureRecognizers>
</Span>
</FormattedString>
</Label.FormattedText>
</Label>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的事件处理程序(属性 Ref,是我要从 XAML 检索的事件处理程序(
private void TapGestureRecognizer_OnTapped(object sender, EventArgs e)
{
var tappedPost = sender as Cases; // Cases is my model with the Ref property
Navigation.PushAsync(new CaseViewModel(tappedPost.Ref));
}
我会从 Xaml 中检索 Ref 属性,如上所示。 由于列表视图,命令对我不起作用(我已经尝试过了(。 只有点击处理程序对我有用,但不幸的是,它没有检索该属性。 有人来帮我吗? 谢谢。
sender
应该是GestureRecognizer
附加到的元素(在您的情况下,span
private void TapGestureRecognizer_OnTapped(object sender, EventArgs e)
{
var span = (Span)sender;
var case = (Cases)span.BindingContext;
// you could also use span.Text
Navigation.PushAsync(new Cases(case.Ref));
}