Uro*_*ros 2 xamarin xamarin.forms
我有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>
Run Code Online (Sandbox Code Playgroud)
和TapImageCommand在视图模型的构造函数中定义为:
TapImageCommand = new Command<string>(ImagePath =>
{
OnImageTapped(ImagePath);
});
Run Code Online (Sandbox Code Playgroud)
和TapImageCommand定义为:
public ICommand TapImageCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)
问题是永远不会触发OnImageTapped.我究竟做错了什么?
这里的问题是你认为你绑定ImagePath了列表后面的对象,但你不是.看看Command你是绑定的,这是PageModel的一部分,而不是列表中的对象,所以也不是CommandParameter.
因此,ImagePath很可能null,并且它与您Command期望的签名不匹配string.
在这种特殊情况下,最简单的方法是将整个对象作为参数提供,并自行获取属性.我将假设列表中的对象是类型Foo,然后像下面一样编辑你的代码.
在您的视图中,编辑TapGestureRecognizer以下内容:
TapGestureRecognizer Command="{Binding TapImageCommand}" CommandParameter="{Binding .}" />
点指向自身,在这种情况下是Foo列表中的特定实例.然后编辑Command如下:
TapImageCommand = new Command<Foo>(fooObject =>
{
OnImageTapped(fooObject);
});
Run Code Online (Sandbox Code Playgroud)
现在,在您的OnImageTapped方法中,您可以提取ImagePath属性.
| 归档时间: |
|
| 查看次数: |
8145 次 |
| 最近记录: |