| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | 
							- namespace InABox.Avalonia.Router;
 
- public class Router<TViewModelBase> where TViewModelBase:class
 
- {
 
-     private TViewModelBase _currentViewModel = default!;
 
-     protected readonly Func<Type, TViewModelBase> CreateViewModel;
 
-     
 
-     
 
-     public event Action<TViewModelBase>? CurrentViewModelChanged;
 
-     public Router(Func<Type, TViewModelBase> createViewModel)
 
-     {
 
-         CreateViewModel = createViewModel;
 
-     }
 
-     protected TViewModelBase CurrentViewModel
 
-     {
 
-         set
 
-         {
 
-             if (value == _currentViewModel) return;
 
-             _currentViewModel = value;
 
-             OnCurrentViewModelChanged(value);
 
-         }
 
-     }
 
-     private void OnCurrentViewModelChanged(TViewModelBase viewModel)
 
-     {
 
-         CurrentViewModelChanged?.Invoke(viewModel);
 
-     }
 
-     public virtual T GoTo<T>(Action<T>? configure) where T : TViewModelBase
 
-     {
 
-         var viewModel = InstantiateViewModel<T>(configure);
 
-         CurrentViewModel = viewModel;
 
-         return viewModel;
 
-     }
 
-     public T InstantiateViewModel<T>(Action<T>? configure) where T : TViewModelBase
 
-     {
 
-         var result = (T)Convert.ChangeType(CreateViewModel(typeof(T)), typeof(T));
 
-         if (result is IDualFunctionViewModel dualFunction)
 
-         {
 
-             dualFunction.IsPopup = false;
 
-         }
 
-         configure?.Invoke(result);
 
-         return result;
 
-     }
 
- }
 
 
  |