所以我的场景是 page1.xaml 有一个可点击的项目列表。比如说,项目#1、#2、#3。单击其中任何一个时,都会向用户显示 page2.xaml(例如,用户需要先登录才能看到 item#1、#2 或 #3 的内容)。
因此,page2.xaml 有一个“登录”按钮。单击应让用户登录的应用程序,并显示“下一页”。“下一页”可以是项目#1、#2或#3的内容。
例如,我不想将下一页存储为相对 url 的字符串,因为“下一页”可能需要参数。例如,要显示 item#2,我需要传递 item 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 吗?
我可能不清楚,因为我不习惯在网上发布编码问题,但希望有人可以帮助我消除对这种情况下垃圾收集如何工作的疑问。
顺便说一句,这可能不是传递数据的最佳方式,如果是这种情况,请随时建议我另一种方式来执行此逻辑。
干杯