Xamarin.Forms 如何将 CommandParameter 设置为 ListView 项目本身

How to set the CommandParameter to the ListView item itself in Xamarin.Forms

我正在使用 C# 中定义的自定义 ViewCell 来填充 Xamarin.Forms 中的 ListView。 ViewCell 包含一个图像,充当按钮,单击时应该能够操作 ListView 的基础数据。

基本上我正在寻找等效于以下代码的代码:

<Image.GestureRecognizers>
    <TapGestureRecognizer                                           
        Command="{Binding Path=BindingContext.PlusClickedCommand, Source={x:Reference Name=ChallengesLV}}"
        CommandParameter="{Binding}"/>
</Image.GestureRecognizers>

我试过:

plusButton.GestureRecognizers.Add(new TapGestureRecognizer() {
Command = bindingContext.AddProgressToChallengeCommand, 
CommandParameter = new Binding(".")} });

但是当我尝试在我的视图模型中访问类型为 Challenge 的对象时,它给了我一个 NullReference 异常:

AddProgressToChallengeCommand = new Command( (sender) => doSomething((Challenge)sender) );

当我在调试模式下检查发件人对象时,它告诉我它是一个 Binding 类型的对象,每个 属性 null 除了 path="."

如何获取此绑定引用的项目?

感谢杰森: 命令需要像这样初始化,以访问参数:

AddProgressToChallengeCommand = new Command<Challenge>( (challenge) => 
doSomething(challenge);

对于识别器绑定,我需要将其更改为:

var recognizer = new TapGestureRecognizer() {Command = bindingContext.AddProgressToChallengeCommand};
recognizer.SetBinding(TapGestureRecognizer.CommandParameterProperty, ".");
plusButton.GestureRegognizers.Add(recognizer);