RealmInvalidObjectException при удалении объекта в формах xamarin ListView - PullRequest
0 голосов
/ 08 мая 2020

Моя проблема в том, что каждый раз, когда объект удаляется из listView, я получаю RealmInvalidObjectException «Попытка доступа к отсоединенной строке». Я написал свой код, ссылающийся как на документацию, так и на этот пример https://github.com/realm/realm-dotnet/tree/master/examples/QuickJournal/QuickJournal, но безуспешно. Пытался найти решение в Интернете, но безуспешно. Пробовал, но безуспешно: C# - как удалить строку в области - android xamarin

Я использую Prism MVVM framework v7.2.0.1422, Realm v4. 3.0, Xamarin forms v4.6.0.726, C # 8

Я разрешаю область один раз в конструкторе ViewModel и сразу заполняю IEnumerable, привязанный к listview:

    public ProductGroupsViewModel(INavigationService navigationService
                                , RealmConfiguration config
                                , IPageDialogService dialogService) : base(navigationService)
            {
                realm = Realm.GetInstance(config);
                ProductGroups = realm.All<ProductGroup>();
                DeleteCommand = new DelegateCommand<object>(Delete);
                ...
            }

элемент меню удаления списка :

        <ListView
            x:Name="ProductGroupsList"
            CachingStrategy="RecycleElement"
            HasUnevenRows="True"
            ItemsSource="{Binding ProductGroups}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <ViewCell.ContextActions>
                            <MenuItem
                                BindingContext="{Binding Source={x:Reference ProductGroupsList}, Path=BindingContext}"
                                Command="{Binding DeleteCommand}"
                                CommandParameter="{Binding Source={x:Reference Item}, Path=BindingContext}"
                                IsDestructive="true">
                            </MenuItem>
                        </ViewCell.ContextActions>
                        ...

способ удаления объекта:

private void Delete(object item)
        {
            if (item is ProductGroup productGroup && productGroup.IsValid)
            {
                    realm.Write(() =>
                    {
                        realm.Remove(productGroup);
                    });
            }
        }

Это единственное место в коде, где эти объекты можно было удалить. Насколько мне известно, после этого нет следующих обратных вызовов.

Класс объекта:

public class ProductGroup : RealmObject
    {
        [PrimaryKey]
        public int Id { get; set; }

        public DateTimeOffset Date { get; set; }

        public string Description { get; set; }

        [Backlink(nameof(Product.Group))]
        public IQueryable<Product> Products { get; }

        public string Title { get; set; }
    }

в этом случае не было продуктов с этой ProductGroup.

...

(я также получаю ArgumentOutOfRangeException: «Указанный аргумент был вне диапазона допустимых значений.» Если удаленный элемент является единственным в списке, но эта проблема выходит за рамки этого вопроса, я думаю)

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