Windows Azure Mobile Services を使用して、Windows Phone 8 アプリでデータを保存および取得しています。これは少し複雑な問題なので、説明するために最善を尽くします。
まず、生のプッシュ通知を使用してメッセージを受信しています。メッセージを受信すると、アプリのリストボックスが更新されます。アプリを開くと、ページに移動しListBox
、更新が正常に行われたプッシュ通知を受け取りListBox
ます。戻るボタンを押して同じページに移動するとListBox
、プッシュ通知が受信され、更新するコードがListBox
エラーなしで実行されますが、更新されListBox
ません。両方のシナリオでハンドラーを使用して同じコードが実行されることを確認しましたが、2 番目のインスタンスで、[戻る] を押してから同じページに再度移動すると、正しくバインドされない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
どんな助けでも感謝します。ありがとう。