【发布时间】:2018-03-30 05:24:49
【问题描述】:
我正在使用具有 MainPage 的导航模型,其中包含一个汉堡菜单和一个拆分视图中的 MyFrame。我有两个页面,WorkingPage 和 SavePage,它们显示在 MyFrame 中。所以 MainPage 包括这个:
<Page>
<!-- Other stuff -->
<SplitView>
<SplitView.Pane>
<!-- Other stuff -->
<ListBox Name="HamburgerMenuMenuItems"
SelectionChanged="HamburgerMenuMenuItems_SelectionChanged">
<ListBoxItem Name="HamburgerMenuItemSave">
<!-- Content -- >
</ListBoxItem>
</ListBox>
<!-- Other stuff -->
</SplitView.Pane>
<SplitView.Content>
<Frame Name="MyFrame"></Frame>
</SplitView.Content>
</SplitView>
<!-- Other stuff -->
</Page>
用户单击保存,这是汉堡菜单中的一项(设置为列表框),并在 MainPage 上引发选择更改事件,这导致 MainPage 启动从 WorkingPage 到 SavePage 的导航我的框架。
public sealed partial class MainPage : Page
{
private void HamburgerMenuMenuItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// Other options similar ...
else if (HamburgerMenuItemSave.IsSelected)
{
MyFrame.Navigate(typeof(Pages.File.SavePage));
}
// Other options similar ...
}
}
WorkingPage 包含我希望 SavePage 有权访问的数据成员。
这就是我所拥有的:
public sealed partial class WorkingPage : Page
{
public MyClass myClass;
// Other stuff ...
}
我希望将“myClass”的值传递给 SavePage,因此最终结果为:
public sealed partial class SavePage : Page
{
public MyClass myClass;
// Other stuff ...
}
我从研究中知道(并且我自己也广泛使用它),在两个页面之间传递参数的正确方法如下:
Frame.Navigate(typeof(PageClass), someParameter);
但是问题是MainPage是启动导航的地方,但是需要传递的参数值(myClass)只存在于WorkingPage的范围内。因此,这需要:
- A) 导航由WorkingPage发起,这样我就可以使用上面这行代码,只需将“SavePage”作为PageClass和“myClass”作为参数,或者
- B) MainPage 不知何故需要了解“myClass”的值,以便我可以使用与 (A) 相同的代码行,但使用“this.MyFrame”而不是“Frame”
如何通过从 MainPage 启动的导航事件来完成从 WorkingPage 到 SavePage 的“myClass”值?这似乎是一种常见的需求,但我发现的所有内容都只涉及一个页面启动导航到另一个页面的简单情况,此时必须将参数从启动页面传递到另一个页面。
【问题讨论】:
标签: c# parameters uwp navigation parameter-passing