したがって、私のシナリオは、page1.xaml にクリック可能な項目のリストがあるというものです。アイテム #1、#2、#3 とします。それらのいずれかをクリックすると、ユーザーには page2.xaml が表示されます (たとえば、ユーザーはアイテム #1、#2、または #3 のコンテンツを表示する前にログインする必要があります)。
したがって、page2.xaml には「ログイン」ボタンがあります。どのアプリがユーザーをログインさせ、「次のページ」を表示するかをクリックします。「次のページ」は、アイテム #1、#2、または #3 のコンテンツにすることができます。
たとえば、「次のページ」にはパラメーターが必要な場合があるため、次のページを相対 URL の文字列として保存したくありません。たとえば、アイテム #2 を表示するには、アイテム ID とその他のパラメーターを渡す必要があります。
そのため、「次のページ」と、その次のページに移動するときに渡すパラメーターを認識できるように、page2.xaml を設定する必要があります。
これが私が思いついたコードです...ページ#1があります。
public partial class Page1 : PhoneApplicationPage
{
public Page1()
{
InitializeComponent();
}
private object[] parametersForNextPage;
protected override OnNavigatedFrom(NavigationEventArgs e)
{
if (e.Content is Page2 )
{
if (parametersForNextAction != null)
{
var mm = (Page2)e.Content;
// The reason why I need to set mm.NextPage and mm.parameters is because the NextPage could be any page
mm.NextPage = HandleActionFunc; // This is some another function that will be called after Page2
mm.parameters = parametersForNextPage; // HandleActionFunc needs parameters
}
}
}
private void Item_Click(object sender, RoutedEventArgs e)
{
var control = (SomeRandomUserControlDefinedByMe)sender;
parametersForNextPage = control.parameters;
PageNavController.NavigateToPage2();
}
}
次に、ページ#2があります:
public partial class Page2 : PhoneApplicationPage
{
public object[] parameters;
public Action<object[]> goToNextPage;
public Page1()
{
InitializeComponent();
}
//...//
private void Button_Click(object sender, EventArgs e)
{
GoToNextPage(parameters);
}
}
さて、私が持っている質問は...これはメモリリークにつながる可能性がありますか?
これについてはよくわかりません...
Page2 には、Page1 の parametersForNextPage への参照であるパラメータ フィールドがあります。
これは、Page1 が Page2 に移動すると、Page2 は Page1 のフィールドへの参照を保持しているため、Page1 がガベージ コレクションされないようにするということですか?
しかし、この場合でも、Page2 から「次のページ」に移動すると、ガベージ コレクターは Page1 と Page2 を消去するのでしょうか?
コーディングに関する質問をオンラインで投稿することに慣れていないため、わかりにくかったかもしれませんが、この場合のガベージ コレクションがどのように機能するかについて、誰かが疑問を解消するのを手伝ってくれることを願っています。
これは、データを渡す最良の方法ではないかもしれません。その場合は、このロジックを実行する別の方法を提案してください。
乾杯