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

3

我将使用在C#中定义的自定义ViewCell来填充Xamarin.Forms中的ListView。ViewCell包含一个Image,它充当按钮,当单击时,应能够操作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的对象,除了path ="。"之外,每个属性都为null。

我该如何获取此绑定所引用的项?


我认为你需要使用Command<Challenge>来传递Challenge类型的参数 - 发送者不是参数。 - Jason
你说得对,我需要进行更改。此外,我还需要添加myTapGestureRecognizer.SetBinding(TapGestureRecognizer.CommandParameterProperty, ".")。感谢您的提示! - Jackilion
1个回答

1
感谢Jason: 需要这样初始化命令,才能访问参数:
AddProgressToChallengeCommand = new Command<Challenge>( (challenge) => 
doSomething(challenge);

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接