C# 从Xamarin.Forms中的列表/可观察集合中删除项

C# 从Xamarin.Forms中的列表/可观察集合中删除项,c#,sqlite,xamarin.forms,C#,Sqlite,Xamarin.forms,我正在构建一个应用程序来学习使用SQLite和Xamarin.Forms的基本CRUD命令 我可以成功地从SQlite数据库中删除listitem,但是当我尝试从listview中删除它时,也会出现错误 以下是相关代码: namespace ContactBook { public partial class MainPage : ContentPage { private SQLiteAsyncConnection _connection;

我正在构建一个应用程序来学习使用SQLite和Xamarin.Forms的基本CRUD命令

我可以成功地从SQlite数据库中删除listitem,但是当我尝试从listview中删除它时,也会出现错误

以下是相关代码:

namespace ContactBook
{
    

    public partial class MainPage : ContentPage
    {
        private SQLiteAsyncConnection _connection;
        private ObservableCollection<Contacts> _contacts;
        

        public MainPage()
        {
            InitializeComponent();

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


        protected override async void OnAppearing()
        {

            //Create table and insert current data
            await _connection.CreateTableAsync<Contacts>();

            var contacts = await _connection.Table<Contacts>().ToListAsync();

            listView.ItemsSource = contacts;

            base.OnAppearing();

        }


        async void MenuItem_Clicked(System.Object sender, System.EventArgs e)
        {
            var deletecontact = (sender as MenuItem).CommandParameter as Contacts;


            if (await DisplayAlert("Deleting Contact", $"Are you sure you want to delete {deletecontact.FullName}?", "Yes", "No"))
            {

                await _connection.DeleteAsync(deletecontact);

                _contacts.Remove(deletecontact);

            }

        }
namespace联系人簿
{
公共部分类主页:ContentPage
{
专用SQLiteAsyncConnection\u连接;
私人可观察收集联系人;
公共主页()
{
初始化组件();
_connection=DependencyService.Get().GetConnection();
}
受保护的重写异步void OnAppearing()
{
//创建表并插入当前数据
wait_connection.CreateTableAsync();
var contacts=wait_connection.Table().ToListAsync();
listView.ItemsSource=联系人;
base.OnAppearing();
}
已单击异步无效菜单项(System.Object sender,System.EventArgs e)
{
var deletecontact=(发送方为MenuItem)。COMMAND参数为Contacts;
如果(等待DisplayAlert(“删除联系人”,$“是否确实要删除{deletecontact.FullName}?”,“是”,“否”))
{
wait_connection.DeleteAsync(deletecontact);
_触点。移除(删除触点);
}
}
这是错误消息:

System.NullReferenceException: Object reference not set to an instance of an object
  at ContactBook.MainPage.MenuItem_Clicked (System.Object sender, System.EventArgs e) [0x00149] in /Users/mikkel/Projects/ContactBook/ContactBook/MainPage.xaml.cs:66
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021
  at Foundation.NSAsyncSynchronizationContextDispatcher.Apply () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/14.0.0.0/src/Xamarin.iOS/Foundation/NSAction.cs:178
  at at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
  at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Library/Frameworks/Xamarin.iOS.framework/Versions/14.0.0.0/src/Xamarin.iOS/UIKit/UIApplication.cs:86
  at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0000e] in /Library/Frameworks/Xamarin.iOS.framework/Versions/14.0.0.0/src/Xamarin.iOS/UIKit/UIApplication.cs:65
  at ContactBook.iOS.Application.Main (System.String[] args) [0x00001] in /Users/mikkel/Projects/ContactBook/ContactBook.iOS/Main.cs:17
System.NullReferenceException:对象引用未设置为对象的实例
在ContactBook.MainPage.MenuItem_处,在/Users/mikkel/Projects/ContactBook/ContactBook/MainPage.xaml.cs:66中单击(System.Object sender,System.EventArgs e)[0x00149]
在/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/iOS/mcs/class/referencesource/mscorlib/System/Runtime/CompilerServices/asynchmethodbuilder.cs:1021中的System.Runtime.CompilerServices
在.NasyNyCalpSimultCasExpSerix.Apple()中使用[0x0000 ] //SraveWorks/XAMARII.iOS.Frase/Value/140.0.0/SRC/XAMARIN。IOS/F粉刷/NasActudia.
在(包装器管理为本机)UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
在/Library/Frameworks/Xamarin.iOS.framework/Versions/14.0.0.0/src/Xamarin.iOS/UIKit/UIApplication.cs:86中的UIKit.UIApplication.Main(System.String[]参数,System.IntPtr主体,System.IntPtr委托)[0x00005]
在/Library/Frameworks/Xamarin.iOS.framework/Versions/14.0.0.0/src/Xamarin.iOS/UIKit/UIApplication.cs:65中的UIKit.UIApplication.Main(System.String[]args,System.String principalClassName,System.String delegateClassName)[0x0000e]
在/Users/mikkel/Projects/ContactBook/ContactBook.iOS/Application.Main(System.String[]args)[0x00001]中的ContactBook.iOS.Application.Main:17

您声明了一个类级别变量
\u contacts

private ObservableCollection<Contacts> _contacts;
为了避免这种情况,请在加载数据时使用class变量

_contacts = new ObservableCollection<Contacts>(await _connection.Table<Contacts>().ToListAsync());
listView.ItemsSource = _contacts;

 
\u contacts=newobserveCollection(等待连接.Table().toListSync());
listView.ItemsSource=\u联系人;

好的,这是有道理的,但是当我这样做的时候,我会在wait#u connection.table上看到一个错误。非常感谢-我讨厌你这样做时它变得如此明显。希望所有这些练习都能让我达到目的:)如果你有任何好的C#教程或其他内容,请随时告诉我。
_contacts.Remove(deletecontact);
_contacts = new ObservableCollection<Contacts>(await _connection.Table<Contacts>().ToListAsync());
listView.ItemsSource = _contacts;