2012-04-13 62 views
2

对于下面的代码以外的QueryString的值:无法访问的OnNavigatedTo方法

public string matchid; 


protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     matchid = null; 
     base.OnNavigatedTo(e); 
     if (NavigationContext.QueryString.TryGetValue("matchid", out matchid)) 
     { 
      MessageBox.Show(matchid);  //statement1   
     } 
    } 

public void display() 
{ 
    MessageBox.Show(matchid); //statement2 
} 

我获得用于语句1的输出,而它是扔ArgumentNullException为语句2。变量'matchid'是为两个函数全局定义的,但它不保留display()的值。

有没有什么办法可以在display()中获得matchid的值???

+2

其中一件事情正在发生 - 要么是您的类有多个实例,要么是在'OnNavigatedTo'之前调用display()。 – dasblinkenlight 2012-04-13 02:24:46

+0

什么时候显示被调用? – 2012-04-13 02:36:55

+0

当我调用父类的构造函数时,正在调用显示。 – anurag 2012-04-13 02:38:24

回答

1

一旦将全局变量matchid设置为OnNavigated to,它将保持设置状态,之后您应该可以在PhoneApplicationPage的类中使用任何实例方法。你需要考虑的事情是:

  1. 你打电话之前display分配matchid回零,并且因此使用matchid是空,不能用MessageBox的使用,或者,
  2. 待办事项在OnNavigatedTo中分配了matchid后,您致电display

您应该指定有关电话display信息。

顺便说一下,你可以访问OnNavigatedTo之外的NavigationContext。您不需要将其值存储在全局变量中。