2012-08-31 11 views
6

Gdy strona jest nawigowana w silverlight, możesz zastąpić tę metodę.Jak wykrywać przycisk Wstecz lub Nawigacja do przodu w aplikacji nawigacji silverlight

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
} 

NavigationEventArgs ma NavigationMode wyliczanie który jest zdefiniowany jako

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

Ale nazywając e.NavigationMode zawsze rzuca NotImplementedException

Czy istnieje sposób w Silverlight do wykrywania strony jest poruszać się z powodu użytkownik kliknął przycisk przewijania do przodu/do tyłu.

To, co próbuję osiągnąć, to stan, który można zachować, gdy użytkownik kliknie przycisk Wstecz.

Załóżmy na przykład, że masz stronę klienta, która pokazuje listę klientów w datagrid. Użytkownik może wybrać klienta i istnieje widok szczegółowy, który pokazuje wszystkie zamówienia dla tego klienta. Teraz w elemencie zamówienia możesz kliknąć link hiperłącza, który przeniesie Cię do historii wysyłki zamówienia, która jest osobną stroną. Kiedy użytkownik kliknie przycisk Wstecz, chcę wrócić do strony klientów i automatycznie wybrać klienta, którego przeglądał. Czy to w ogóle możliwe?

Próbowałem też z funkcji nawigacji fragment

NavigationService.Navigate(new Uri("#currentcustomerid=" 
     + customer.Id.ToString(), UriKind.Relative)); 

gdy zmienia wybór klienta, ale to dodaje zbyt wiele elementów do historii, gdy użytkownik kliknie różnych klientów na stronie klienta.

EDIT

Istnieje również metoda można zastąpić

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
{ 
} 

która jest taka sama jak obsługa zdarzenia NavigationService.Navigating jak wskazano w odpowiedzi BugFinder. W tej metodzie zawsze zwraca New kiedy uderzysz w przycisk powrotu lub do przodu. Jedyny czas, metoda ta zwraca Back jest, kiedy jawnie wywołać NavigationService.GoBack()

Odpowiedz

1

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

dotyczy przypadku Nawigacja ..

jeśli robię

_ns.Navigating += ns_Navigating; 
     void ns_Navigating(object sender, NavigatingCancelEventArgs e) 
     { 

      if (SecurityCheck(e.Uri.OriginalString)) return; 
      e.Cancel = true; 
      ShowError("You are not authorised to view this page"); 
     } 

mogę tam zobaczyć ustawiony jest tryb e.NavigationMode. Możesz zrobić tam swój test?

+0

Nawet po naciśnięciu przycisku Wstecz lub Dalej. ** NavigationMode ** to zawsze "NavigationMode.New" w tej metodzie. –

1

Nie sądzę, istnieją proste sposoby, aby to zrobić po wyjęciu z pudełka, o ile wiem.

Co próbujesz osiągnąć można łatwo zrobić za pomocą ramy utworzonego w http://ultimateframework.codeplex.com

Co mam zrobić jest do siatki nawigacji ramce nawigacji Silverlight i pryzmat razem, więc trzeba będzie jedność i pryzmatu i Przyjazny mvvm.

Co chcesz osiągnąć można zrobić za pomocą ramy, w jeden z następujących sposobów

1) Wdrożenie IsNavigationTarget i zwraca true -> który będzie utrzymywać ten sam przypadek, gdy przechodząc z powrotem, zatem utrzymanie wybór/wybrany pozycja.

2) dostęp Urzędowym onnavigatedto do śledzenia skąd jesteś, powiedzmy/szt/1 był poprzedni stos, więc wiesz, przycisk wstecz został wciśnięty od pozycji 1.

3) Można nawet realizować swoje Własny powrót/forward/odświeżenie w ramach niestandardowego sterowania przewidzianego dla osiągnięcia tego samego wyniku (jeszcze nie w codeplex)

Używam go do kodu produkcyjnego w pracy, a ja go stworzyłem, więc nie krępuj się wypróbować. Zwróć uwagę, że wersja na niej jest wadliwa i nie mam jeszcze czasu na wydanie naszej najnowszej wersji, ale jeśli jej potrzebujesz, zaktualizuję ją dla ciebie :), tylko pm me.

1

Ustaw zmienną w formancie użytkownika zawierającym contentframe, która wskazuje, który klient jest aktywny.

Dodaj procedurę obsługi dla zdarzenia nawigacyjnego contentframe w elemencie usercontrol. Użyj tej opcji, aby sprawdzić zmienną wskazującą, który klient jest aktywny (jeśli zmienna nie ma wartości NULL) i wybrać klienta.

+0

Myślę, że przegapiłeś punkt pytania. Faktem jest, że kiedy strona jest nawigowana, nie mogę ustalić, czy jest to spowodowane nawigacją wsteczną czy świeżą nawigacją. W jaki sposób będzie przechowywana pomoc państwa? –

+0

Ponieważ można stwierdzić, skąd pochodzą. Jeśli przechodzą od drugiej strony do pierwszej za pomocą innych środków niż przycisk Wstecz, klient będzie wyświetlany bez względu na wszystko - ale być może i tak nie byłoby to niepożądane. – NeutralHandle

Powiązane problemy