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) "
Почему?
Ответы
Ответ 1
Метод Navigate фактически является частью нестатического NavigationService. Поскольку он нестатический, вам нужно создать экземпляр. Причина, по которой вам не приходилось создавать экземпляр раньше, заключается в том, что он является частью объекта "Страница", но поскольку вы не наследуете объект "Страница", у вас нет доступа к экземпляру NavigationService.
Существуют различные способы создания таких событий, как создание обработчика событий в вашем пользовательском контроле, который может подписать ваш объект главной страницы (например, MainPage) и заставить его запустить службу NavigationService от ее имени.
Или вы можете просто получить доступ к NavigationService с хоста приложения так:
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(targetUri);
Ответ 2
NavigationService
- это имя свойства в классе PhoneApplicationPage
, но это также имя класса.
Когда вы вызываете метод NavigationService.Navigate()
со страницы, вы используете объект из базового класса. Но в вашем случае у вас нет объекта с этим именем, поэтому компилятор попытается получить доступ к классу NavigationService и сделать вызов, как если бы Navigate был статическим методом.
Но это не статично, поэтому вы получаете эту ошибку: вы должны использовать экземпляр NavigationService