Вместо использования события click, вы должны использовать Command
и CommandParameter
и использовать BindingContext родительской коллекции
<CollectionView ItemsSource="{Binding Sets}">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<ScrollView x:Name="ParentCollection" Orientation="Horizontal">
<StackLayout BindableLayout.ItemsSource="{Binding Pictures}" Orientation="Horizontal">
<BindableLayout.ItemTemplate>
<DataTemplate>
<ff:CachedImage Aspect="AspectFill" Source="{Binding imageSource}">
<ff:CachedImage.GestureRecognizers>
<TapGestureRecognizer Command="{Binding ImageClickCommand}" CommandParameter="{Binding BindingContext.Id, Source={x:Reference Name=ParentCollection}}"/>
</ff:CachedImage.GestureRecognizers>
</ff:CachedImage>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
И в вашей ViewModel:
public Command<int> ImageClickCommand{ get; set; }
И в вашем конструкторе ViewModel:
ImageClickCommand = new Command<int>((Id) =>
{
//Id -> id of the image
});
Но если вы все еще хотите использовать событие Clicked, я бы посоветовал вам сделать это изменение.
Добавьте новое свойство в свой класс изображения:
public class Picture
{
public int Id { get; set; }
public int SetId { get; set; }
public string Name { get; set; }
}
Предполагая, что вы получаете эту Коллекцию от Сервиса, вы можете перебрать ее и установить свой SetId следующим образом:
foreach (var item in Collection)
{
foreach (var picture in item.Pictures)
{
picture.SetId = item.Id
}
}
Теперь в вашем Clicked вы должны иметь доступ к обоим Идентификатор изображения и соответствующий идентификатор набора:
private void AlbumFoto_Clicked(object sender, EventArgs e)
{
CachedImage image = (CachedImage)sender;
var setPicture = image.Source.BindingContext as Picture;
var ImageId = setPicture.Id;
var SetId = setPicture.SetId;
//...
}