在XAML视图中,我有一个开关,它绑定到类的“Done”属性。我想修改“完成”属性的setter,以记录对sqlite数据库的任何更改。
当程序调用FindAsync()方法时,程序无限期挂起而没有任何消息(请参阅下面的代码片段)。我也尝试过其他与数据库相关的方法,比如CreateTableAsync,并且也有相同的挂起。
任何人都知道我做错了什么,以及我能做些什么才能得到我想要的东西?
xaml:
<Switch HorizontalOptions="End" IsToggled="{Binding Done}" />
代码段
public bool Done { get { return _done; } set { _done = value; OnPropertyChanged(); Debug.WriteLine(string.Format("Set attribute {0}: {1}", nameof(Done), value)); var itm = App.Database.FindAsync<LogItem>(Id).Result; // Database.CreateTableAsync<LogItem>().Wait(); Debug.WriteLine("Back from find"); if (itm != null) { // ... } } }
数据库连接:
private static SQLiteAsyncConnection database; public static SQLiteAsyncConnection Database { get { if (database == null) { String dbPath = DependencyService.Get<IFileHelper>().GetLocalFilePath(Constants.DatabaseName); Debug.Write(string.Format("{0}: {1}: ", nameof(Database), dbPath)); database = new SQLiteAsyncConnection(dbPath); Debug.WriteLine("Ok."); } return database; } }
最后,这是LogItem类
public class LogItem
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; } // row name
public string Input { get; set; } // value
}