public bool Navigate(Type source, object parameter = null)
        {
            if (parameter is NavigateToUrlMessage)
            {
                var            targetUri = new Uri((parameter as NavigateToUrlMessage).TargetUrl, UriKind.Absolute);
                WebBrowserTask webTask   = new WebBrowserTask();
                webTask.Uri = targetUri;
                webTask.Show();
                return(true);
            }

            if (parameter is SelectSubredditMessage)
            {
                var viewLocator = SimpleIoc.Default.GetService(typeof(IDynamicViewLocator)) as IDynamicViewLocator;
                source = viewLocator.MainView;
                var temp = parameter as SelectSubredditMessage;
                parameter = new SelectTemporaryRedditMessage
                {
                    Subreddit = temp.Subreddit
                };
            }

            var uriAttribute = source.GetCustomAttributes(typeof(ViewUriAttribute), true).FirstOrDefault() as ViewUriAttribute;

            if (uriAttribute != null)
            {
                var data = JsonConvert.SerializeObject(parameter);
                var uri  = uriAttribute._targetUri + "?data=" + HttpUtility.UrlEncode(data);

                if (Uri.IsWellFormedUriString(uri, UriKind.Relative))
                {
                    var targetUri = parameter != null ? new Uri(uri, UriKind.Relative) : new Uri(uriAttribute._targetUri, UriKind.Relative);
                    return(_frame.Navigate(targetUri));
                }
                else
                {
                    throw new NotImplementedException("Handle a bad URI");
                }
            }
            else
            {
                throw new NotImplementedException("cant navigate to a view that doesnt have ViewUriAttribute");
            }
        }
Ejemplo n.º 2
0
        private void OnSelectTemporarySubreddit(SelectTemporaryRedditMessage message)
        {
            int  indexToPosition;
            bool foundExisting = FindSubredditMessageIndex(message, out indexToPosition);

            if (!foundExisting)
            {
                var newReddit = new TemporaryRedditViewModel(_baconProvider);
                newReddit.RedditViewModel.DetachSubredditMessage();
                newReddit.RedditViewModel.AssignSubreddit(message);
                if (PivotItems.Count > 0)
                {
                    PivotItems.Insert(PivotItems.Count - 1, newReddit);
                }
                else
                {
                    PivotItems.Add(newReddit);
                }
                indexToPosition = PivotItems.Count - 1;
            }
        }