Xaml 如何通过事件处理程序传递绑定属性?

Xaml 如何通过事件处理程序传递绑定属性?,xaml,xamarin,mvvm,xamarin.forms,Xaml,Xamarin,Mvvm,Xamarin.forms,我在ListView中有一个TapGestureRecognizer,它带有一个点击事件处理程序。我想从一个跨度传递到属性后面的代码,如下所示: XAML 我想从上面显示的Xaml中检索Ref属性。命令对我不起作用,因为ListView(我已经试过了)。只有Tapped处理程序对我有效,但不幸的是,它无法检索属性。有人来帮我吗?谢谢。发送者应该是手势识别器所附加的元素(在您的情况下,是span) 您是否可以不喜欢(BindingContext作为ViewModel)。ref,如果ref是公共属性

我在ListView中有一个TapGestureRecognizer,它带有一个点击事件处理程序。我想从一个跨度传递到属性后面的代码,如下所示:

XAML


我想从上面显示的Xaml中检索Ref属性。命令对我不起作用,因为ListView(我已经试过了)。只有Tapped处理程序对我有效,但不幸的是,它无法检索属性。有人来帮我吗?谢谢。

发送者
应该是
手势识别器
所附加的元素(在您的情况下,是
span


您是否可以不喜欢(BindingContext作为ViewModel)。ref,如果ref是公共属性?是,ref是公共属性。BindingContext不适用于我。ListView已具有ItemTapped事件。您可以在ItemTappedEventArgs参数中获得点击的项目。@prezequia奇怪,如果您在某处声明了
BindingContext
,这应该可以工作。不知道为什么它不起作用。您也可以尝试
var span=(span)sender;var vm=(YourViewModel)span.BindingContext您实际上可以从ListView项执行命令,这非常好:Hi Json,我在(Span)发送方上遇到一个错误:“指定的强制转换无效”。有什么想法吗?您可能需要使用调试器来验证该类型的发送者-我已经有一段时间没有这样做了,所以我的记忆可能是错误的调试我可以看到Xamarin.Forms.Span和我需要的Ref的文本值。如何传递此值?正如我之前所问的,发送方对象的实际类型是什么?它是一个Xamarin.Forms.Label
<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>
  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));
    }
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));
}