NavigationService жалуется на выполнение «FileNotFound» из класса, не привязанного ни к какому представлению - PullRequest
2 голосов
/ 07 августа 2011

Я пытаюсь перейти на другую страницу (используя UriMapping) из некоторого класса, который обрабатывает API-интерфейс сервера, но это не работает.Вот мой код:

public void processResponce(item Response)
{
    try
    {
        var token = Response.result.token;
        this.setToken("&token=" + token);
        Debug.WriteLine(this.apiUrl);

        (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/listItems", UriKind.Relative));
    }
    catch
    {
        Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                var messageFromServer = Response.error.message;
                MessageBox.Show(messageFromServer);

                Debug.WriteLine(messageFromServer);
            });
    }
}

SDK постоянно говорит, что файл не существует.Но если я вызову Navigate () из некоторого класса, прикрепленного к представлению (например, MainPage.xaml.cs), то навигация завершится успешно.Кто-нибудь может помочь?

UPD. У меня несколько страниц * .xaml, но этот класс не подключен напрямую к другой странице.Прямо сейчас этот класс называется «JSON-RPC».Я пробовал разные способы решить мою проблему (даже назвал его "public part JSON-RPC: PhoneApplicationPage"), но ... Проблема в том, что если я буду вызывать Navigate () из какого-то класса, прикрепленного к странице * .xaml (вОбозреватель решений отображается как дерево - * .xaml page -> pagename.xaml.cs), затем работает;если я буду вызывать Navigate () из моего класса JSON-RPC, то он всегда говорит: «Файл не найден».

UPD2.Решение: Иногда я чувствую себя дураком.Ответ:

  Deployment.Current.Dispatcher.BeginInvoke(() =>
             {
                  (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/listItems", UriKind.Relative));
             });

Нам нужно вызвать Dispatcher для решения этой проблемы.

Ответы [ 2 ]

0 голосов
/ 08 августа 2011

Иногда я чувствую себя дураком. Ответ:

  Deployment.Current.Dispatcher.BeginInvoke(() =>
             {
                  (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/listItems", UriKind.Relative));
             });

Для решения этой проблемы нам нужно вызвать Dispatcher.

0 голосов
/ 07 августа 2011

Убедитесь, что:

  • Вы включаете расширение ".xaml" в конце URI.
  • Вы полностью указываете маршрут к файлу (для / listItems убедитесь, что listItems.xaml находится в корневом каталоге приложения).
  • Действие сборки файла xaml установлено на «Страница».

Также: вы можете использовать RootFrame вместо RootVisual.

Вот пример, который работаетдля меня:

App.Current.RootFrame.Navigate(new Uri("/Pages/Error.xaml?Message=Application error", UriKind.Relative));
...