Моя проблема в том, что каждый раз, когда объект удаляется из 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: «Указанный аргумент был вне диапазона допустимых значений.» Если удаленный элемент является единственным в списке, но эта проблема выходит за рамки этого вопроса, я думаю)