我在带有轻击事件处理程序的ListView中具有TapGestureRecognizer。我想从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属性。由于ListView(我已经尝试过),因此命令对我不起作用。只有Tapped处理程序为我工作,但不幸的是,它不检索该属性。有人在帮我吗谢谢。
答案 0 :(得分:1)
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));
}