gpt4 book ai didi

xamarin - 如何将参数传递给命令

转载 作者:行者123 更新时间:2023-12-02 21:08:39 25 4
gpt4 key购买 nike

我有 Xamarin Forms 解决方案,并且在一页上有包含图像的列表。单击图像时,我想触发以图像路径作为参数的程序。在 xaml 中我定义图像:

<Image Source="{Binding ImagePath}"
WidthRequest="30" HeightRequest="30"
HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" >
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapImageCommand}" CommandParameter="{Binding ImagePath}" />
</Image.GestureRecognizers>
</Image>

TapImageCommand 在 View 模型的构造函数中定义为:

TapImageCommand = new Command<string>(ImagePath =>
{
OnImageTapped(ImagePath);
});

TapImageCommand 定义为:

public ICommand TapImageCommand { get; set; }

问题是 OnImageTapped 永远不会被触发。我做错了什么?

最佳答案

这里的问题是,您认为正在绑定(bind)列表后面对象的ImagePath,但事实并非如此。查看您正在绑定(bind)的 Command,这是 PageModel 的一部分,而不是列表中的对象,因此 CommandParameter 也不是。

因此,ImagePath 可能为 null,并且它与需要 字符串的 Command 的签名不匹配.

在这种特殊情况下,最简单的方法可能是提供整个对象作为参数并自己获取属性。我将假设列表中的对象是 Foo 类型,然后像下面一样编辑您的代码。

在您的 View 中,将 TapGestureRecognizer 编辑为:

TapGestureRecognizer Command="{Binding TapImageCommand}"CommandParameter="{Binding .}"/>

点指向自身,在本例中是列表中 Foo 的特定实例。然后编辑Command,如下所示:

TapImageCommand = new Command<Foo>(fooObject =>
{
OnImageTapped(fooObject);
});

现在,您可以在 OnImageTapped 方法中提取 ImagePath 属性。

关于xamarin - 如何将参数传递给命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com