我在C#中创建了一个UWP应用。我试图在我的OnNavigatedTo函数中运行不同的代码块,具体取决于发送给我的页面。现在我有if else语句确定运行哪些代码块,具体取决于我将页面发送到我现在的页面。
我现有的代码如下所示:
protected override void OnNavigatedTo(NavigationEventArgs e)
//runs every time MainPage is Navigated to from another page or when program is first started and MainPage loads
{
if ([SomeAttribute == Page2])
{
//attempt to add string from page[2] to List
if (e.Parameter is string && !string.IsNullOrWhiteSpace((string)e.Parameter) && !InspectorInst.Names_list.Contains(e.Parameter))
//if thing passed from previous page (e.Parameter) is a string and isnt null or whitespace and isnt already in the Names_list
{
string s = e.Parameter.ToString();//create string to hold e.Parameter
this.InspectorInst.Names_list.Add(s);//Add string to Names_list
}
}
else{
//do something else
}
base.OnNavigatedTo(e);
}
如果指向我当前所在页面的页面是Page2,那么[SomeAttribute == Page2]应该会返回true。并且SomeAttribute将返回将我发送到我当前正在访问的页面的页面。我无法在UWP文档中找到任何可以实现此目的的内容。
如果以错误的方式解决这个问题并且有更简单的方法来实现这一目标,那会是什么?
由于
答案 0 :(得分:2)
我认为如果您希望页面根据其调用位置而具有不同的行为,则通常的方法是将不同的值作为第二个参数传递给Navigate方法。
如果您想知道哪个页面已调用,那么您可以检查导航堆栈中的最后一个条目,如下所示:
var entry = this.Frame.BackStack.LastOrDefault();
if (entry != null)
// Check entry.SourcePageType - it contains the type of the previous page
请注意,您可能还需要检查NavigationEventArgs.NavigationMode以查看用户是否从页面返回。