2011-05-14 12 views
12

WP7 newb pregunta aquí.WP7 - NavigationService.Navigate se queja de que no está recibiendo una referencia de objeto. . . ¿pero por qué?

Tengo el siguiente código:

public class KeyboardHandler : INotifyPropertyChanged 
{ 
    // lots of methods here 

    public void FunctionKeyHandler() 
    { 
     Uri targetUri = new Uri("/View/SelectTable.xaml",System.UriKind.Relative); 
     NavigationService.Navigate(targetUri); 
    } 
    // more methods 

} 

estoy consiguiendo un error:
"error 1 Se requiere una referencia de objeto para el System.Windows.Navigation campo no estático, método o propiedad' .NavigationService.Navigate (System.Uri)'

¿por qué?

Respuesta

39

Navigate El método es en realidad parte de la clase no estática NavigationService. Como no es estático, debe crear una instancia de este. La razón por la que no ha tenido que crear una instancia anteriormente es porque es parte del objeto Página, pero como no hereda del objeto Página, no tiene acceso a la instancia de NavigationService.

Existen varias formas de hacerlo, como crear un controlador de eventos en su control de usuario al que su objeto de página de host (por ejemplo, MainPage) puede suscribirse y hacer que active el NavigationService en su nombre.

o simplemente puede acceder al NavigationService desde el host de aplicaciones de este modo:

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(targetUri); 
6

NavigationService es el nombre de una propiedad de la clase PhoneApplicationPage, sino que también es el nombre de la clase.

Cuando llama al método NavigationService.Navigate() desde una página, utiliza el objeto de la clase base. Pero en su caso, no tiene un objeto con este nombre, por lo que el compilador intenta acceder a la clase NavigationService y realiza una llamada como si Navigate fuera un método estático.

Pero no es estática, es por esto que recibe este error: debe utilizar una instancia de NavigationService

Cuestiones relacionadas