Получение идентификатора элемента ListView для клика элемента BoxView в Xamarin.Forms - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь извлечь идентификатор элемента ListView, но когда я нажимаю на BoxView, ничего не происходит.

Это мой XAML (извлечение из ViewCell ListView):

<BoxView Grid.Column="1" BackgroundColor="Transparent" HorizontalOptions="FillAndExpand">
                                <BoxView.GestureRecognizers>
                                    <TapGestureRecognizer Command="{Binding DetailsCommand}" CommandParameter="{Binding .}" NumberOfTapsRequired="1"/>
                                </BoxView.GestureRecognizers>
                            </BoxView>

А это мой код:

DetailsCommand = new Command(ShowDetails);

public async void ShowDetails(object obj)
    {
        var selected = obj as Tasks;
        await _navigation.PushAsync(new DetailsPage(selected.Id));
    }

Но когда я нажимаю на BoxView, ничего не происходит.

1 Ответ

0 голосов
/ 12 сентября 2018

Если 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...