1

アイテムのリストを表示するためのページ(フレーム)と、アイテムの詳細をダウンロードして表示するためのページを備えたWindows8用のアプリケーションがあります。通知の送信にもMVVMLightを使用しています。

アプリケーションの使用は次のようになります。

  1. メインページを開く

  2. リストページに移動

    Frame.Navigate(typeof(MyPage));
    
  3. アイテムを選択

    //Complete logic
    Frame.GoBack();
    
  4. メインページに戻り、ビューモデルでファイルのダウンロードを開始し、BeginDownloadFileという1つのNotificationMessageを送信し、ダウンロード後にEndDownloadFileという1つのNotificationMessage送信します。

最初にステップ2、3、および4を実行すると、NotificationReceivedメソッドが1回ヒットし、2回目は2回ヒットします。

private async void NotificationMessageReceived(NotificationMessage msg)
{
    if (msg.Notification == Notifications.BeginDownloadFile)
    {
       FileDownloadPopup.IsOpen = true;
    }
    else if (msg.Notification == Notifications.EndDownloadFile)
    {
       FileDownloadPopup.IsOpen = false;
    }
}

追加情報:FileDownloadPopupは1つしかありませんが、毎回、NotificationMessageReceivedメソッドが呼び出されるたびに追加のポップアップが表示されます。

私の唯一の結論は、アプリで前後に移動する間に、複数のMainPageが作成され、閉じられないということです。これにより、多くのNotificationsMessageReceivedメソッドは、通知が届くのを待っているだけで、ポップアップを表示できます。

2つの質問があります:1。これはWindows 8アプリの通常の動作のように聞こえますか?2. MainPageのすべてのインスタンスを閉じる、または新しいインスタンスを作成せずに前のインスタンスに戻るにはどうすればよいですか?

質問を書き留める前に、重要なことを見逃してしまった場合はお知らせください。

4

2 に答える 2

4

これは私には普通に聞こえます。Windows 8のデフォルトのナビゲーション動作では、順方向ナビゲーションか逆方向ナビゲーションかに関係なく、新しいページに移動するたびに新しいページインスタンスが作成されます。

に設定してみNavigatinCacheModeMainPageくださいRequiredページキャッシュの仕組みの詳細については、 MSDNのドキュメントを参照してください。

于 2012-12-05T06:31:44.743 に答える
3

ページにイベントハンドラーを登録していて、削除していないようです。ページに再度移動するたびに、以前に追加したハンドラーに加えて、ハンドラーが再度追加されます。OnNavigatedToにイベントハンドラーを追加し、OnNavigatedFromで登録を解除してください。

protected override void OnNavigatedTo(Windows.UI.Xaml.Navigation.NavigationEventArgs e)
{
    MyEvent.OnDownloadRequest += MyLocalDOwnloadHandler;  // add the handler
}

protected override void OnNavigatedFrom(Windows.UI.Xaml.Navigation.NavigationEventArgs e)
{
    MyEvent.OnDownloadRequest -= MyLocalDOwnloadHandler;  // remove the handler
}
于 2012-12-05T08:54:00.057 に答える