Xamarin удалить из списка + база данных sqlite - PullRequest
0 голосов
/ 04 марта 2019

Здесь я увидел похожий вопрос, но мой - другой.В приложении было несколько категорий книг, по щелчку открывался список книг

    public class CategoryItem
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
    public string Name { get; set; }
}

XAML

<ListView x:Name="listViewCategory" Margin="20" ItemSelected="OnListItemSelected">
...
  <ViewCell>
  ...
  <ImageButton Source="more.png" Pressed="OnDeleteClicked"/> 

Вот метод

        async void OnListItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        //((App)App.Current).ResumeAtTodoId = (e.SelectedItem as TodoItem).ID;
        //Debug.WriteLine("setting ResumeAtTodoId = " + (e.SelectedItem as TodoItem).ID);
        if (e.SelectedItem != null)
        {
            await Navigation.PushAsync(new BooksListPage
            {
                BindingContext = e.SelectedItem as CategoryItem
            });
        }
    }

    public async void OnDeleteClicked(object sender, EventArgs e)            
    {
        var todoItem = (CategoryItem)BindingContext;
        await App.Database.DeleteCategoryAsync(todoItem);
        await Navigation.PopAsync();
    }

CategoryItemDatabase

public Task<int> DeleteCategoryAsync(CategoryItem item)
    {
        return database.DeleteAsync(item);
    }

Я добавил кнопку image для удаления категории из списка, но получил ошибку:

"Cannot delete Object: it has no PK"

ps извините, мой плохой английский

1 Ответ

0 голосов
/ 04 марта 2019

Но если я иду к редактированию CategoryPage из списка:

async void OnListItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    if (e.SelectedItem != null)
    {
        await Navigation.PushAsync(new CategoryItemPage
        {
            BindingContext = e.SelectedItem as CategoryItem
        });
    }
}

И используя кнопку для удаления

   var deleteButton = new Button { Text = "Delete" };
        deleteButton.Clicked += async (sender, e) =>
        {
            var categoryItem = (CategoryItem)BindingContext;
            await App.Database.DeleteCategoryAsync(categoryItem);
            await Navigation.PopAsync();
        };

Его работа.Но я хочу удалить из списка

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