private void OnCurrentNavigationsCompleted(IViewModel viewModel)
        {
            var mainViewModel = _navigationDispatcher.GetTopViewModels().OfType <MainViewModel>().FirstOrDefault();

            if (mainViewModel == null)
            {
                mainViewModel = _viewModelProvider.GetViewModel <MainViewModel>();
                mainViewModel.ShowAsync((model, result) => model.Dispose(), context: new DataContext {
                    { NavigationConstants.ClearBackStack, true }
                });
            }

            var oldValue = mainViewModel.SelectedItem;

            if (oldValue == viewModel)
            {
                return;
            }
            mainViewModel.SelectedItem = viewModel;
            _navigationDispatcher.OnNavigated(new NavigationContext(SplitViewNavigationType, NavigationMode.New, oldValue, viewModel, this));
            if (oldValue != null)
            {
                _navigationDispatcher.OnNavigated(new NavigationContext(SplitViewNavigationType, NavigationMode.Remove, oldValue, null, this));
            }
        }
示例#2
0
 public static IViewModel GetViewModel([NotNull] this IViewModelProvider viewModelProvider,
                                       [NotNull] Type viewModelType, params DataConstantValue[] parameters)
 {
     Should.NotBeNull(viewModelProvider, nameof(viewModelProvider));
     Should.NotBeNull(viewModelType, nameof(viewModelType));
     return(viewModelProvider.GetViewModel(viewModelType, new DataContext(parameters)));
 }
示例#3
0
        protected virtual void Awake()
        {
            if (DataProviderComponent != null && DataProviderComponent is IViewModelProvider provider)
            {
                DataProvider = provider;
                if (DataProvider.GetViewModel() != null)
                {
                    IsDataReady = true;
                    SetupBinding();
                }
                else
                {
                    DataProvider.DataReadyEvent += OnDataReady;
                }
            }
            else
            {
                DataProvider = GetComponentInParent <IViewModelProvider>();

                if (DataProvider.GetViewModel() != null)
                {
                    IsDataReady = true;
                    SetupBinding();
                }
                else
                {
                    DataProvider.DataReadyEvent += OnDataReady;
                }
            }
        }
示例#4
0
 public async Task ShowSensorHistoryAsync(int idSensor, IViewModel parentViewModel)
 {
     using (var vm = _viewModelProvider.GetViewModel <SensorHistoryVm>(parentViewModel, parameters: Constants.IdSensor.ToValue(idSensor)))
     {
         await vm.ShowAsync();
     }
 }
示例#5
0
 public static T GetViewModel <T>([NotNull] this IViewModelProvider viewModelProvider,
                                  [NotNull] GetViewModelDelegate <T> getViewModelGeneric, params DataConstantValue[] parameters)
     where T : class, IViewModel
 {
     Should.NotBeNull(viewModelProvider, nameof(viewModelProvider));
     Should.NotBeNull(getViewModelGeneric, nameof(getViewModelGeneric));
     return((T)viewModelProvider.GetViewModel(getViewModelGeneric, new DataContext(parameters)));
 }
 public static T GetViewModel <T>([NotNull] this IViewModelProvider viewModelProvider,
                                  [NotNull] GetViewModelDelegate <T> getViewModelGeneric, params DataConstantValue[] parameters)
     where T : IViewModel
 {
     Should.NotBeNull(viewModelProvider, "viewModelProvider");
     Should.NotBeNull(getViewModelGeneric, "getViewModelGeneric");
     return((T)viewModelProvider.GetViewModel(adapter => getViewModelGeneric(adapter), new DataContext(parameters)));
 }
示例#7
0
		public TViewModel GetViewModel()
		{
			var args = _argumentsProvider.GetArguments<TArg>();
			var checkResult = _prerequisitesChecker.Check( args );
			if ( checkResult.ContainsError )
				throw new ArgumentException( checkResult.Message );

			return _viewModelProvider.GetViewModel( args );
		}
        protected virtual IViewModel WrapInternal(IViewModel viewModel, Type wrapperType, IDataContext dataContext)
        {
#if PCL_WINRT
            if (wrapperType.GetTypeInfo().IsGenericTypeDefinition)
#else
            if (wrapperType.IsGenericTypeDefinition)
#endif
            { wrapperType = wrapperType.MakeGenericType(viewModel.GetType()); }
            var vm = (IWrapperViewModel)_viewModelProvider.GetViewModel(wrapperType, dataContext ?? DataContext.Empty);
            vm.Wrap(viewModel, dataContext);
            return(vm);
        }
示例#9
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            IocInjector iocInjector = value as IocInjector;

            if (iocInjector != null)
            {
                IViewModelProvider viewModelProvider = iocInjector.Resolve <IViewModelProvider>();
                if (viewModelProvider != null)
                {
                    return(viewModelProvider.GetViewModel(parameter as Type));
                }
            }
            return(null);
        }
示例#10
0
        protected virtual object WrapInternal(object item, WrapperRegistration wrapperRegistration, IDataContext dataContext)
        {
            if (wrapperRegistration.WrapperFactory != null)
            {
                return(wrapperRegistration.WrapperFactory(item, dataContext));
            }
            var wrapperType = wrapperRegistration.Type;

#if PCL_WINRT
            if (wrapperType.GetTypeInfo().IsGenericTypeDefinition)
#else
            if (wrapperType.IsGenericTypeDefinition)
#endif
            { wrapperType = wrapperType.MakeGenericType(item.GetType()); }

            var viewModel = item as IViewModel;
            if (viewModel != null && typeof(IWrapperViewModel).IsAssignableFrom(wrapperType))
            {
                dataContext = dataContext.ToNonReadOnly();
                if (!dataContext.Contains(InitializationConstants.ParentViewModel))
                {
                    var parentViewModel = viewModel.GetParentViewModel();
                    if (parentViewModel != null)
                    {
                        dataContext.AddOrUpdate(InitializationConstants.ParentViewModel, parentViewModel);
                    }
                }
                var vm = (IWrapperViewModel)_viewModelProvider.GetViewModel(wrapperType, dataContext);
                vm.Wrap(viewModel, dataContext);
                return(vm);
            }

#if PCL_WINRT
            var constructor = wrapperType.GetTypeInfo()
                              .DeclaredConstructors
                              .FirstOrDefault(info => !info.IsStatic);
#else
            var constructor = wrapperType
                              .GetConstructors(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)
                              .FirstOrDefault();
#endif
            if (constructor == null)
            {
                return(null);
            }
            return(constructor.InvokeEx(item));
        }
示例#11
0
 public virtual void SetupBinding()
 {
     ViewModel = DataProvider.GetViewModel();
 }
 public PresentationView(IViewModelProvider viewModelProvider)
 {
     InitializeComponent();
     BindingContext = viewModelProvider.GetViewModel <PresentationViewModel>(Navigation);
 }