Пример #1
0
        /// <summary>
        /// Handle navigated event, ensuring the new view
        /// is properly initialized with a viewmodel.
        /// </summary>
        public void Navigated(object sender, NavigationEventArgs e)
        {
            // indicate navigation
            var oldVm = _currentViewModel as IViewModel;

            if (oldVm != null)
            {
                oldVm.NavigatedAway();
            }

            _currentViewModel = null;
            if (e.Content == null)
            {
                return;
            }
            _currentView = (Control)e.Content;

            object newViewModel = null;

            if (e.NavigationMode == NavigationMode.Back)
            {
                // use existing viewmodel for view
                newViewModel = _currentView.DataContext;
            }
            else
            {
                // get query parameter
                var    uri         = e.Uri.OriginalString;
                string queryString = null;
                var    param       = uri.IndexOf("?");
                if (param > 0)
                {
                    queryString = uri.Substring(param + 1);
                }

                // create and/or initialize viewmodel
                var vmf = new ViewModelFactory();
                newViewModel = vmf.CreateViewModel(_currentView, queryString);
            }

            // update current view
            _currentViewModel = newViewModel as IShowStatus;

            // indicate navigation
            var newVm = _currentViewModel as IViewModel;

            if (newVm != null)
            {
                if (e.NavigationMode == NavigationMode.Back)
                {
                    newVm.NavigatingBackTo();
                }
                else
                {
                    newVm.NavigatingTo();
                }
            }

            // set view datacontext if necessary
            if (!ReferenceEquals(_currentView.DataContext, _currentViewModel))
            {
                _currentView.DataContext = _currentViewModel;
            }
        }
Пример #2
0
    /// <summary>
    /// Handle navigated event, ensuring the new view
    /// is properly initialized with a viewmodel.
    /// </summary>
    public void Navigated(object sender, NavigationEventArgs e)
    {
      // indicate navigation
      var oldVm = _currentViewModel as IViewModel;
      if (oldVm != null)
        oldVm.NavigatedAway();

      _currentViewModel = null;
      if (e.Content == null)
        return;
      _currentView = (Control)e.Content;

      object newViewModel = null;
      if (e.NavigationMode == NavigationMode.Back)
      {
        // use existing viewmodel for view
        newViewModel = _currentView.DataContext;
      }
      else
      {
        // get query parameter
        var uri = e.Uri.OriginalString;
        string queryString = null;
        var param = uri.IndexOf("?");
        if (param > 0)
          queryString = uri.Substring(param + 1);

        // create and/or initialize viewmodel
        var vmf = new ViewModelFactory();
        newViewModel = vmf.CreateViewModel(_currentView, queryString);
      }

      // update current view
      _currentViewModel = newViewModel as IShowStatus;

      // indicate navigation
      var newVm = _currentViewModel as IViewModel;
      if (newVm != null)
        if (e.NavigationMode == NavigationMode.Back)
        newVm.NavigatingBackTo();
      else
          newVm.NavigatingTo();

      // set view datacontext if necessary
      if (!ReferenceEquals(_currentView.DataContext, _currentViewModel))
        _currentView.DataContext = _currentViewModel;
    }