首页 > 解决方案 > 如何从 Xamarin 的 Sqlite 和列表中删除项目

问题描述

我有一个大问题。我在 Sqlite 中有一个列表,我想通过 menuitem 单击事件删除一个项目。编码:

 async void MenuItem_Clicked(object sender, EventArgs e)
        {
            var nahrungsmittel = _nahrungsmittel[0];
            await _connection.DeleteAsync(nahrungsmittel);
            _nahrungsmittel.Remove(nahrungsmittel);

        }

目前它只删除可观察集合和 db 中的第一个对象。我怎样才能删除我点击的那个?如果这还不够,还有更多代码:

namespace EssenBestellen.Speisen
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class SpeisenUebersicht : ContentPage
    {

    private SQLiteAsyncConnection _connection;
    private ObservableCollection<Nahrungsmittel> _nahrungsmittel;

    public SpeisenUebersicht()
    {
        BindingContext = new 
EssenBestellen.ViewModels.NahrungsmittelListeViewModel(new 
EssenBestellen.ViewModels.PageService());
        InitializeComponent();

        _connection = DependencyService.Get<ISQLiteDb>().GetConnection();

    }

     async protected override void OnAppearing()
     {
         await _connection.CreateTableAsync<Nahrungsmittel>();

         var nahrungsmittel = await _connection.QueryAsync<Nahrungsmittel> 
("SELECT * FROM Nahrungsmittel ORDER BY NAME ASC"); //.ToListAsync();
         _nahrungsmittel = new ObservableCollection<Nahrungsmittel> 
  (nahrungsmittel);
        speisenListe.ItemsSource = _nahrungsmittel;


        base.OnAppearing();
    }

    async void Add_Clicked(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new SpeisenAdd());
    }

    async void MenuItem_Clicked(object sender, EventArgs e)
    {
        var nahrungsmittel = _nahrungsmittel[0];
        await _connection.DeleteAsync(nahrungsmittel);
        _nahrungsmittel.Remove(nahrungsmittel);

    }


    private void speisenListe_ItemSelected(object sender, 
SelectedItemChangedEventArgs e)
    {

    (BindingContext as 






EssenBestellen.ViewModels.NahrungsmittelListeViewModel).SelectNahrungsmittel(e.S 



  electedItem as Nahrungsmittel);

    }

    private void MenuItem_Clicked_1(object sender, EventArgs e)
    {
        DisplayAlert("Kommt Noch","noch nicht implementiert", "OK");

    }


}
}

Xaml 文件更新

<ContentPage.ToolbarItems>
<ToolbarItem Icon="plus.png" Text="Neu" Activated="Add_Clicked"/>
</ContentPage.ToolbarItems>

<StackLayout>

<ListView x:Name="speisenListe" HasUnevenRows="True" ItemsSource="{Binding Nahrungsmittels}" SelectedItem="{Binding SelectedNahrungsmittel, Mode=TwoWay}" ItemTapped="speisenListe_ItemTapped" ItemSelected="speisenListe_ItemSelected">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.ContextActions>
                    <MenuItem Text="Bearbeiten" IsDestructive="False" Clicked="MenuItem_Clicked"  Command="{Binding .}" />
                    <MenuItem Text="Löschen" IsDestructive="True" Clicked="MenuItem_Clicked"  Command="{Binding .}" />
                </ViewCell.ContextActions>
                <StackLayout Orientation="Horizontal" Padding="5">
                    <Label Text="{Binding Id}" HorizontalOptions="StartAndExpand"/>
                    <Label Text="{Binding Name}" TextColor="Gray" HorizontalOptions="CenterAndExpand"/>
                    <Label Text="{Binding Preis}" TextColor="Gray" HorizontalOptions="EndAndExpand"/>
                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

标签: c#sqlitexamarinxamarin.forms

解决方案


我的一个朋友帮助了我,这是解决方案:

    async void MenuItem_Clicked(object sender, EventArgs e)
    {
        if (_nm != null)
        {
            await _connection.DeleteAsync(_nm);
            _nahrungsmittel.Remove(_nm);
        }

    }


    private void speisenListe_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
       if (e.SelectedItem is Nahrungsmittel nm)
        {
            _nm = nm;
        }
    (BindingContext as EssenBestellen.ViewModels.NahrungsmittelListeViewModel).SelectNahrungsmittel(e.SelectedItem as Nahrungsmittel);

    }

还有一个小错误:你必须点击listItem一次,然后你可以按住/滑动和删除它。与 itemTapped 相同的问题,插入 Itemselected ......但是,现在一切都在工作


推荐阅读