如何使本地Sqlite项在脱机状态下显示

如何使本地Sqlite项在脱机状态下显示,sqlite,azure-mobile-services,xamarin.forms,Sqlite,Azure Mobile Services,Xamarin.forms,我正在处理一个Xamarin Forms PCL Sqlite/Azure移动服务同步示例,名为TodoAzureSync.iOS。 Azure移动同步部分工作正常。 问题是——当我拔出网络连接,添加新的TodoItem,导航回列表视图时——它不会显示在列表视图中。 仍然处于脱机模式,我停止并重新启动应用程序-我的列表视图中没有任何项目。 但是,当我重新打开网络并重新启动应用程序时,所有待办事项都会显示,包括我在脱机模式下输入的待办事项! 这告诉我,尽管我的脱机项目在脱机期间没有显示在列表视图中

我正在处理一个Xamarin Forms PCL Sqlite/Azure移动服务同步示例,名为TodoAzureSync.iOS。 Azure移动同步部分工作正常。 问题是——当我拔出网络连接,添加新的TodoItem,导航回列表视图时——它不会显示在列表视图中。 仍然处于脱机模式,我停止并重新启动应用程序-我的列表视图中没有任何项目。 但是,当我重新打开网络并重新启动应用程序时,所有待办事项都会显示,包括我在脱机模式下输入的待办事项! 这告诉我,尽管我的脱机项目在脱机期间没有显示在列表视图中,但它实际上已记录到本地Sqlite实例中,并且在重新建立网络时,它与Azure后端同步,并显示在列表视图中

我的问题是:即使在脱机模式下,如何使脱机项目实际显示在列表视图中

以下是TodoItemManager(PCL)代码,负责所有CRUD操作:

使用系统;
使用System.Threading.Tasks;
使用Microsoft.WindowsAzure.MobileServices;
使用System.Collections.Generic;
使用系统诊断;
使用Microsoft.WindowsAzure.MobileServices.Sync;
名称空间TodoXaml
{
/// 
///管理器类是数据访问层上的抽象
/// 
公共类TodoItemManager{
IMobileServiceSyncTable ToToToToToTable;
IMobileServiceClient;
公共TodoItemManager(IMobileServiceClient,
IMobileServiceSyncTable(可旋转)
{
this.client=client;
this.todoTable=todoTable;
}
公共异步任务GetTaskAsync(字符串id)
{
尝试
{
等待SyncAsync();
返回wait todoTable.LookupAsync(id);
} 
捕获(MobileServiceInvalidOperationException msioe)
{
Debug.WriteLine(@“INVALID{0}”,msioe.Message);
}
捕获(例外e)
{
Debug.WriteLine(@“ERROR{0}”,e.Message);
}
返回null;
}
公共异步任务GetTasksAsync()
{
尝试
{
等待SyncAsync();
返回新列表(等待ToToTable.ReadAsync());
} 
捕获(MobileServiceInvalidOperationException msioe)
{
Debug.WriteLine(@“INVALID{0}”,msioe.Message);
}
捕获(例外e)
{
Debug.WriteLine(@“ERROR{0}”,e.Message);
}
返回null;
}
公共异步任务SaveTaskAsync(TodoItem项)
{
如果(item.ID==null)
等待ToToTable.InsertAsync(项目);
其他的
等待ToToTable.UpdateAsync(项目);
//等待SyncAsync();
}
公共异步任务DeleteTaskAsync(TodoItem项)
{
尝试
{
等待ToToTable.DeleteAsync(项);
//等待SyncAsync();
} 
捕获(MobileServiceInvalidOperationException msioe)
{
Debug.WriteLine(@“INVALID{0}”,msioe.Message);
}
捕获(例外e)
{
Debug.WriteLine(@“ERROR{0}”,e.Message);
}
}
公共异步任务SyncAsync()
{
尝试
{
等待此消息。client.SyncContext.PushAsync();
等待此消息。todoTable.PullAsync();
}
捕获(MobileServiceInvalidOperatione异常)
{
Debug.WriteLine(@“同步失败:{0}”,e.Message);
}
}
}
}
以下是iOS AppDelegate:

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用单调的基础;
使用MonoTouch.UIKit;
使用托多沙姆;
使用Xamarin.Forms;
使用System.IO;
使用Microsoft.WindowsAzure.MobileServices;
使用Microsoft.WindowsAzure.MobileServices.Sync;
使用Microsoft.WindowsAzure.MobileServices.SQLiteStore;
使用System.Threading.Tasks;
名称空间TodoXaml
{
//应用程序的UIApplicationLegate。此类负责
//启动应用程序的用户界面,并监听
//(可选地)响应
//来自iOS的应用程序事件。
[注册(“AppDelegate”)]
公共部分类AppDelegate:UIApplicationDelegate
{
//类级声明
窗口;
移动服务客户端;
IMobileServiceSyncTable ToToToToToTable;
TodoItemManager TodoItemManager;
公共覆盖bool FinishedLaunching(UIApplication应用程序、NSDictionary选项)
{
Init();
//根据屏幕大小创建新窗口实例
窗口=新的UIWindow(UIScreen.MainScreen.Bounds);
#区域蓝色的东西
Init();
SQLitePCL.CurrentPlatform.Init();
客户端=新的MobileServiceClient(
常数.Url,
常数(键);
#区域Azure同步内容
// http://azure.microsoft.com/en-us/documentation/articles/mobile-services-xamarin-android-get-started-offline-data/
//初始化SQLite存储的新代码
InitializeStoreSync().Wait();
#端区
ToToTable=Client.GetSyncTable();
todoItemManager=新的todoItemManager(客户端,todoTable);
App.SetTodoItemManager(todoItemManager);
#端区
#区域文本到语音内容
App.SetTextToSpeech(新语音());
#端区
//如果已定义视图,请将其添加到此处:
//window.RootViewController=navigationControl