WP7 - NavigationService.Navigate жалуется, что не получает ссылку на объект.,,но почему? - PullRequest
12 голосов
/ 14 мая 2011

WP7 новый вопрос здесь.

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

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) »

Почему?

Ответы [ 2 ]

39 голосов
/ 14 мая 2011

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

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

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

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(targetUri);
6 голосов
/ 14 мая 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...