UWP MVVM Sqlite C# - 重新加载页面后添加到listview更新的新项目

时间:2018-02-14 21:01:48

标签: c# sqlite mvvm

我正在尝试实现CRUD功能以与本地SQLite数据库(名称空间Microsoft.Data.Sqlite)一起使用并遵循MVVM模式(John Shew’s Blog)。

我遇到一个问题,即更新功能无法对列表视图中新添加的项目起作用。添加到列表视图的任何新项目都需要重新加载,然后用户才能编辑其数据并在数据库中进行更改更新。之前加载到列表视图中的项目仍可以编辑,这些更改将反映在列表视图和数据库中。

我研究过使用async / await,Task Async Programming,切换所有List<>到ObservableCollections<>,仍然无效。我查看了很多帖子,现在来到stackoverflow寻求帮助。

我不确定要发布什么代码,因为我只想提供适用于诊断的内容,而不是产生太多的噪音/杂乱。请告诉我,我会提供。

public static void InitializeDatabase()
        {
            using (SqliteConnection db =
                new SqliteConnection("Filename=TestDB.db"))
            {
                db.Open();
            string tableCommand = "CREATE TABLE IF NOT " +
                "EXISTS Student (Id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "Name NVARCHAR(2048) NULL," +
                "Email NVARCHAR(2048) NULL)";

            SqliteCommand createTable = new SqliteCommand(tableCommand, db);
            createTable.ExecuteReader();
            db.Close();
        }
    }
public static void Write(Student student)
        {
            using (SqliteConnection db = new SqliteConnection("Filename=TestDB.db"))
            {
                db.Open();
                SqliteCommand insertCommand = new SqliteCommand
                {
                    Connection = db,
                    CommandText = "INSERT INTO Student VALUES (NULL, @Name, @Email)"
                };
                insertCommand.Parameters.AddWithValue("@Name", student.Name = "");
                insertCommand.Parameters.AddWithValue("@Email", student.Email = "");
                insertCommand.ExecuteReader();
                db.Close();
            }
        }

public static void Update(Student student)
        {
            using (SqliteConnection db = new SqliteConnection("Filename=TestDB.db"))
            {
                db.Open();
                SqliteCommand insertCommand = new SqliteCommand
                {
                    Connection = db,
                    CommandText = "UPDATE Student SET Name=@Name, Email=@Email WHERE Id=@Id";
                };
                insertCommand.Parameters.AddWithValue("@Name", ((object)student.Name) ?? DBNull.Value);
                insertCommand.Parameters.AddWithValue("@Email", ((object)student.Email) ?? DBNull.Value);
                insertCommand.Parameters.AddWithValue("@Id", ((object)student.Id) ?? DBNull.Value);
                insertCommand.ExecuteNonQuery();
                db.Close();
            }
        }

0 个答案:

没有答案