Пример #1
0
 public ViewToViewModel(UserControl control, IBaseViewModel type, MyContentRegion region, params object[] args)
 {
     View      = control;
     ViewModel = type;
     Region    = region;
     if (args != null)
     {
         Args = args;
     }
 }
Пример #2
0
 public void ClearHistory(string regionName)
 {
     if (ConfigurationManager.AppSettings["disable_views"] != null)
     {
         if (!Regions.ContainsKey(regionName))
         {
             Regions[regionName]       = new MyContentRegion();
             RegionHistory[regionName] = new List <ViewToViewModel>();
         }
     }
     if (Regions.ContainsKey(regionName))
     {
         RegionHistory[regionName].Clear();
     }
     else
     {
         throw new Exception("Invalid region name.");
     }
 }
Пример #3
0
        public T NavigateUsingViewModel <T>(string regionName, params object[] args)
        {
            if (ConfigurationManager.AppSettings["disable_views"] != null)
            {
                if (!Regions.ContainsKey(regionName))
                {
                    Regions[regionName]       = new MyContentRegion();
                    RegionHistory[regionName] = new List <ViewToViewModel>();
                }
            }
            T returnValue = default(T);

            if (Regions.ContainsKey(regionName))
            {
                Dispatcher.Invoke(() =>
                {
                    try
                    {
                        var region = Regions[regionName];

                        ClearForwardHistory(regionName);
                        var modelName = typeof(T).Name;



                        if (region.ChildRegions.ContainsKey(modelName))
                        {
                            foreach (var childRegion in region.ChildRegions.Values)
                            {
                                childRegion.Close();
                            }

                            region.Visibility = Visibility.Collapsed;
                            var oldControl    = (UserControl)region.Content;

                            if (oldControl != null)
                            {
                                var baseViewModel = oldControl.DataContext as IBaseViewModel;
                                if (baseViewModel != null)
                                {
                                    oldControl.DataContext = null;
                                    baseViewModel.Close();
                                }
                            }
                            foreach (var childRegion in region.ChildRegions.Values)
                            {
                                if (childRegion.VirtualRegionName == modelName)
                                {
                                    childRegion.Visibility = Visibility.Visible;
                                    if (childRegion.Content != null && ((UserControl)childRegion.Content).DataContext.GetType().Name == modelName)
                                    {
                                        var baseViewModel = ((UserControl)childRegion.Content).DataContext as IBaseViewModel;
                                        if (baseViewModel != null)
                                        {
                                            baseViewModel.OnNavigationCompleted();
                                            returnValue         = (T)baseViewModel;
                                            var vievToViewModel = new ViewToViewModel((UserControl)childRegion.Content, baseViewModel, childRegion, args);
                                            RegionHistory[regionName].Add(vievToViewModel);
                                            RegionToViewModel[regionName] = vievToViewModel;
                                        }
                                    }
                                    else
                                    {
                                        var control         = FindViewByViewModel <T>();
                                        var viewModel       = Activator.CreateInstance(typeof(T), args);
                                        childRegion.Content = control;
                                        control.DataContext = viewModel;
                                        returnValue         = (T)viewModel;
                                        if (viewModel is IBaseViewModel)
                                        {
                                            ((IBaseViewModel)viewModel).View = control;
                                        }
                                        var vievToViewModel = new ViewToViewModel(control, (IBaseViewModel)viewModel, childRegion, args);
                                        RegionHistory[regionName].Add(vievToViewModel);
                                        RegionToViewModel[regionName] = vievToViewModel;
                                    }
                                }
                                else
                                {
                                    childRegion.Close();
                                }
                            }
                        }
                        else
                        {
                            foreach (var childRegion in region.ChildRegions.Values)
                            {
                                childRegion.Close();
                            }
                            var oldControl = (UserControl)region.Content;

                            if (oldControl != null)
                            {
                                var baseViewModel = oldControl.DataContext as IBaseViewModel;
                                if (baseViewModel != null)
                                {
                                    oldControl.DataContext = null;
                                    baseViewModel.Close();
                                }
                            }
                            region.Visibility = Visibility.Visible;

                            var control         = FindViewByViewModel <T>();
                            var viewModel       = Activator.CreateInstance(typeof(T), args);
                            region.Content      = control;
                            control.DataContext = viewModel;
                            returnValue         = (T)viewModel;
                            if (viewModel is IBaseViewModel)
                            {
                                ((IBaseViewModel)viewModel).View = control;
                            }
                            var vievToViewModel = new ViewToViewModel(control, (IBaseViewModel)viewModel, region, args);
                            RegionHistory[regionName].Add(vievToViewModel);
                            RegionToViewModel[regionName] = vievToViewModel;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex.Message, ex);
                    }
                });
            }
            else
            {
                throw new Exception("Invalid region name.");
            }

            return(returnValue);
        }