using System.Windows.Navigation; using PhoneApp.NavigateToView.Core.Views; namespace PhoneApp.NavigateToView.Core.Navigation { public static class NavigationServiceExtensions { public static void NavigateToView<IView>(this NavigationService navigationService) where IView : Views.IView { Views.ViewInfosAttribute[] viewInfosAttribute = (Views.ViewInfosAttribute[])typeof(IView).GetCustomAttributes(typeof(Views.ViewInfosAttribute), false); if (viewInfosAttribute.Length == 1) { navigationService.Navigate(viewInfosAttribute[0].Uri); } } public static void NavigateToView<IView, ViewNavigationParametersType>(this NavigationService navigationService, ViewNavigationParametersType navigationParameters) where IView : Views.IView<ViewNavigationParametersType> { if (navigationParameters != null) { NavigatedEventHandler navigatedEventHandler = null; navigatedEventHandler = (s, e) => { ((IView<ViewNavigationParametersType>)e.Content).NavigationParameters = navigationParameters; navigationService.Navigated -= navigatedEventHandler; }; navigationService.Navigated += navigatedEventHandler; navigationService.NavigateToView<IView>(); } } } }