Подтвердить что ты не робот

WP7 - NavigationService.Navigate жалуется, что не получает ссылку на объект., но почему?

WP7 newb вопрос здесь.

У меня есть следующий код:

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

}

Я получаю сообщение об ошибке:
  "Ошибка 1 Ссылка на объект требуется для нестатического поля, метода или свойства" System.Windows.Navigation.NavigationService.Navigate(System.Uri) "

Почему?

4b9b3361

Ответ 1

Метод Navigate фактически является частью нестатического NavigationService. Поскольку он нестатический, вам нужно создать экземпляр. Причина, по которой вам не приходилось создавать экземпляр раньше, заключается в том, что он является частью объекта "Страница", но поскольку вы не наследуете объект "Страница", у вас нет доступа к экземпляру NavigationService.

Существуют различные способы создания таких событий, как создание обработчика событий в вашем пользовательском контроле, который может подписать ваш объект главной страницы (например, MainPage) и заставить его запустить службу NavigationService от ее имени.

Или вы можете просто получить доступ к NavigationService с хоста приложения так:

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

Ответ 2

NavigationService - это имя свойства в классе PhoneApplicationPage, но это также имя класса.

Когда вы вызываете метод NavigationService.Navigate() со страницы, вы используете объект из базового класса. Но в вашем случае у вас нет объекта с этим именем, поэтому компилятор попытается получить доступ к классу NavigationService и сделать вызов, как если бы Navigate был статическим методом.

Но это не статично, поэтому вы получаете эту ошибку: вы должны использовать экземпляр NavigationService