我正在使用 Windows Azure 移动服务在我的 Windows Phone 8 应用程序中存储和检索数据。这是一个有点复杂的问题,所以我会尽力解释它。
首先,我使用原始推送通知来接收消息,当它收到消息时,它会更新我的应用程序中的列表框。当我打开我的应用程序时,导航到带有 的页面ListBox
并收到ListBox
更新正常的推送通知。如果我按回,然后导航到与 相同的页面,ListBox
收到推送通知,更新代码ListBox
执行没有错误但ListBox
没有更新。我已经检查了相同的代码在两种情况下都使用处理程序运行,但是当我按下回然后重新导航到同一页面时OnNavigatedTo
,似乎在第二个实例中没有正确绑定。ListBox
以下是一些代码片段:
MobileServiceCollection 声明:
public class TodoItem
{
public int Id { get; set; }
[JsonProperty(PropertyName = "text")]
public string Text { get; set; }
}
private MobileServiceCollection<ToDoItem, ToDoItem> TodoItems;
private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();
推送通知接收处理程序:
void PushChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)
{
string message;
using (System.IO.StreamReader reader = new System.IO.StreamReader(e.Notification.Body))
{
message = reader.ReadToEnd();
}
Dispatcher.BeginInvoke(() =>
{
var todoItem = new TodoItem
{
Text = message,
};
ToDoItems.Add(todoItem);
}
);
}
我试过使用:
ListItems.UpdateLayout();
和
ListItems.ItemsSource = null;
ListItems.ItemsSource = ToDoItems;
在上述过程中添加的代码之前和之后,ToDoItem
但它没有帮助。
在我的事件处理程序中调用以下过程OnNavigatedTo
,并刷新Listbox
并分配ToDoItems
为项目源:
private async void RefreshTodoItems()
{
try
{
ToDoItems = await todoTable
.ToCollectionAsync();
}
catch (MobileServiceInvalidOperationException e)
{
MessageBox.Show(e.Message, "Error loading items", MessageBoxButton.OK);
}
ListItems.ItemsSource = ToDoItems;
}
上述程序是async
,但我已确保它在收到任何通知之前完成。即便如此,如上所述,当我打开应用程序时,导航到显示ListBox
它更新正常的页面。当我按下返回时,再次导航到同一页面,它不起作用。当我退出应用程序时,重新打开它,导航到带有 的页面ListBox
,它会再次工作,然后如果我按返回并重新打开页面则会失败。因此,当我按下并导航到同一页面时,似乎ListBox
没有正确绑定。ToDoItems
任何帮助表示赞赏。谢谢。