1

INavigationAwareインターフェースを実装するビューがあります。このインターフェイスには、MSDN http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.regions.inavigationaware.onnavigatedfrom(v=pandp.40).aspxによると、OnNavigationFromメソッドがあります。

実装者がからナビゲートされているときに呼び出されます。

ここで、ユーザーが未保存の変更を残していないことを確認し、未保存の変更がある場合は、それらを保存するかどうかをユーザーに確認します。この時点で、ユーザーが滞在して編集を続行したい場合に備えて、何らかの方法でそのナビゲーション要求をキャンセルできるようにする必要があります。

MSDNのINavigationAwareインターフェイスに関するドキュメントには、このインターフェイスの使用方法については何も記載されていません。

私はひどく間違っているかもしれません、そしてそれをキャンセルする方法がないか、このインターフェースはそのためのものではありません。

とにかく、誰かが私がユーザーを滞在させて、1つのナビゲーション要求が開始された編集を続けることができる方法を教えてくれたらありがたいです。

4

2 に答える 2

6

INavigationAwareから継承する「 IConfirmNavigationRequest 」というトリックを実行する別のインターフェイスがあることを発見しました。ブール引数を持つコールバックを受け取るConfirmNavigationRequestメソッドがあります。ナビゲーションリクエストをキャンセルしたい場合は、そのコールバックをfalseで呼び出します。そのままにしておきたい場合は、trueで呼び出します。

continuationCallback(MessageBox.Show("Discard changes?", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)

これで問題は解決しました。ご清聴ありがとうございました。

于 2012-11-21T15:32:06.900 に答える
-1

このリンクをご覧ください: http ://www.silverlightshow.net/items/Working-with-Prism-4-Part-4-Region-Navigation.aspx

別の方法として、RegionManagerを使用している場合は、RegionManager.RequestNavigate()メソッドの周りにブール論理を配置してみてください。このようなもの:

if(isDirty)
{
    RegionManager.RequestNavigate(RegionConstants.ShellMainRegion, new Uri(typeof(YourView).Name, UriKind.Relative));
}
else
{
// Don't navigate
}

最後に1つ考えます。EventAggregatorを使用している場合は、ナビゲーションイベントを公開し、それに応じて応答できます。

于 2012-11-21T15:24:35.387 に答える