Если Command
находится в коде позади ViewCell , то вы должны установить источник вашей Command Binding
для ячейки просмотра. Пример ниже.
<BoxView.GestureRecognizers>
<TapGestureRecognizer Command="{Binding DetailsCommand, Source={x:Reference Cell}}" CommandParameter="{Binding .}" NumberOfTapsRequired="1"/>
</BoxView.GestureRecognizers>
Затем на ViewCell вам нужно установить x:Name
. Это должно быть установлено для Binding x: Reference для работы.
<ViewCell x:Name="Cell">
Редактировать
ViewModel.cs
public class ViewModel
{
public ObservableCollection<MyObject> ItemsSource { get; set; } = new ...
}
MyObject.cs - это BindingContext вашего ViewCell
public class MyObject
{
public int Id { get; }
public ICommand DetailsCommand { get; }
// Other properties if needed
public MyObject(int id)
{
Id = id;
DetailsCommand = new Command(ShowDetails);
}
private async void ShowDetails()
{
var selected = obj as Tasks;
await _navigation.PushAsync(new DetailsPage(Id));
}
}
В классе MyObject вы можете передать значение Id
при создании ItemsSource
, и вам больше не потребуется CommandParameter
.
В общем, ваш DetailsCommand
должен быть в классе MyObject.cs , который используется как объект в вашем ItemsSource
, а не в вашей ViewModel.