Windows 8を使用してメトロアプリを開発していますRTMおよびC#(VS 2012 RTM)、ページのリロードで立ち往生しています。同じページに移動せずにページをリロードする方法を教えてもらえますか?もう一度。簡単な:多言語をサポートするメトロアプリを開発しています。ユーザーが言語を選択すると、以下のコードでプライマリ言語をオーバーライドします。
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
このコードを使用してページをリロードします
this.Frame.Navigate(this.GetType());
言語が「de」に変更されましたが、ページの「戻る」を押すと、前のページに移動するのではなく、同じページに移動します。何か見落としがありましたか。誰かがこれを行う方法を説明してくれますか。前もって感謝します
これにより、ページが更新されます。
var _Frame = Window.Current.Content as Frame;
_Frame.Navigate(_Frame.Content.GetType());
_Frame.GoBack(); // remove from BackStack
警告として、私のサンプルはページパラメータを考慮していません。あなたがそうする必要があるかもしれません。また、別の注意点として、私のサンプルはページを2回リロードします。ただし、BackStackから新しいエントリを削除するには、GoBack()が必要です。 WPとは異なり、FrameにはRefresh()がありません。また、BackStackにはRemove()がありません。
[〜#〜]更新[〜#〜]
私はもはや上記のアプローチを使用しません。私はこれを使用します:
public bool Reload() { return Reload(null); }
private bool Reload(object param)
{
Type type = this.Frame.CurrentSourcePageType;
if (this.Frame.BackStack.Any())
{
type = this.Frame.BackStack.Last().SourcePageType;
param = this.Frame.BackStack.Last().Parameter;
}
try { return this.Frame.Navigate(type, param); }
finally { this.Frame.BackStack.Remove(this.Frame.BackStack.Last()); }
}
あなたが何をしようとしているのか完全には理解できないので、これは間違っている可能性があります。
ページを更新するときにそのコード行を呼び出すことで、現在のタイプの新しいオブジェクトを作成してナビゲートすることになります。そのため、ユーザーが現在のページにいる間に行った変更は保存されません。
どんなタイプのデザインパターンを使用していますか?このようなもののために、私はMVVM(MVVMライトライブラリを使用)を使用します。これは、このようなものをチェックする本当にクールなナビゲーションサービスを実装します。