Проблема с удалением элемента в коллекцииView .NET Maui

Я пытаюсь удалить объект с именем SelectedOrder в TableData моей модели представления. Привязка работает отлично, но когда я нажал на элемент, который нужно удалить, в моей модели представления переменная SelectedOrder имеет значение null, когда активируется RelayCommand... Не могли бы вы сказать мне, почему?

 <CollectionView
     ItemsSource = "{Binding Orders}"
     SelectedItem = "{Binding SelectedOrder}">
     <CollectionView.ItemTemplate>
         <DataTemplate>                       
                 <Frame>
                 <Frame.GestureRecognizers>
                     <TapGestureRecognizer Command = "{Binding Source = {RelativeSource AncestorType = {x:Type viewmodels:MainPageViewModel}}, Path=DeleteOrderCommand}" NumberOfTapsRequired = "1" />
                 </Frame.GestureRecognizers>
                 <Label
                     FontSize = "Medium"
                     HorizontalOptions = "Start"
                     Text = "{Binding Id}"
                     VerticalTextAlignment = "Center" />                               
                 </Frame>                       
         </DataTemplate>
     </CollectionView.ItemTemplate>
     <CollectionView.ItemsLayout>
         <LinearItemsLayout ItemSpacing = "5" Orientation = "Vertical" />
     </CollectionView.ItemsLayout>
 </CollectionView>
 [ObservableProperty]
 private Order selectedOrder;


 [RelayCommand]
 private async Task DeleteOrder()
 {          
     App.OrdersRepo.TestDeleteItem(SelectedOrder);

     Orders = await App.OrdersRepo.TestGetItems();
 }

В чем проблема?

Какой код App.OrdersRepo.TestDeleteItem()? Не могли бы вы опубликовать полный код вашей модели представления?

Jessie Zhang -MSFT 03.07.2024 10:18

общественный недействительный TestDeleteItem (T элемент) {попробуйте {connection.Delete (элемент); } catch (Exception ex) { StatusMessage = $"Ошибка: {ex.Message}"; } } У ViewModel больше ничего нет. все работает нормально, но когда я останавливаю программу на точке останова, чтобы увидеть переменную SelectedOrder, она равна нулю. Я думаю, это должно быть связано с фреймом страницы контента или чем-то еще.. –

hugo vazquez 03.07.2024 10:24

Я пробовал, но та же проблема...

hugo vazquez 03.07.2024 10:47
0
3
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На основе вашего кода я создал на своей стороне демо-версию и обнаружил, что если мы вызовем событие Frame.GestureRecognizers внешнего фрейма, то событие SelectionChangedCommand CollectionView не будет запущено. Таким образом, значение SelectedOrder не будет обновляться при нажатии Frame.

Но в качестве обходного пути вы можете передать текущий элемент событию DeleteOrderCommand.

Вы можете добавить CommandParameter = "{Binding .}" для TapGestureRecognizer рамки.

Пожалуйста, обратитесь к следующему коду:

        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Frame BackgroundColor = "pink" >
                    <Frame.GestureRecognizers>
                        <TapGestureRecognizer Command = "{Binding Source = {RelativeSource AncestorType = {x:Type local:MainPageViewModel}}, Path=DeleteOrderCommand }" CommandParameter = "{Binding .}" NumberOfTapsRequired = "1"  />
                    </Frame.GestureRecognizers>
                    <Label
                 FontSize = "Medium"
                 HorizontalOptions = "Start"
                 Text = "{Binding Id}"
                 VerticalTextAlignment = "Center" />

                </Frame>
            </DataTemplate>
        </CollectionView.ItemTemplate>

А затем добавьте параметр в метод DeleteOrder

    [RelayCommand]
    private async Task DeleteOrder(Order obj)
    {
        // do something
         
         
        //App.OrdersRepo.TestDeleteItem(obj);

        // Orders = await App.OrdersRepo.TestGetItems();

    }

Хороший! Большое спасибо!

hugo vazquez 03.07.2024 12:49

Другие вопросы по теме

.NET IEnumerable, что это такое?
Разница между вызовом асинхронного метода и переносом вызова в Task.Run
Создать каталог, только если он не существует (.NET)
Foreach нельзя использовать для переменных типа «PropertyInfo», поскольку «PropertyInfo» не имеет определения для «GetEnumerator»
Положение большого пальца динамической сетки данных WPF изменилось, когда определение строки и столбца добавляется в выбранную динамическую сетку
Указание симулятора IOS при запуске приложения с помощью инструментов командной строки .NET
Код ошибки MSB4062 в проекте функции Azure в VS для запуска API Microsoft Graph с функциями Azure
Отключить закрытие начальной загрузки вне холста при щелчке по фону в приложении Blazor .NET
Целые числа, допускающие значение NULL – почему не возникает исключение?
Можем ли мы предоставить участнику данных BLOB-объектов хранилища разрешение на регистрацию приложения Azure?