/// <summary> /// Initializes a new instance of the <see cref="UIViewController"/> class. /// </summary> public UIViewController() { if (CatelEnvironment.IsInDesignMode) { return; } var viewModelType = GetViewModelType(); if (viewModelType is null) { Log.Debug("GetViewModelType() returned null, using the ViewModelLocator to resolve the view model"); viewModelType = _viewModelLocator.ResolveViewModel(GetType()); if (viewModelType is null) { const string error = "The view model of the view could not be resolved. Use either the GetViewModelType() method or IViewModelLocator"; Log.Error(error); throw new NotSupportedException(error); } } _logic = new PageLogic(this, viewModelType); _logic.TargetViewPropertyChanged += (sender, e) => { OnPropertyChanged(e); PropertyChanged?.Invoke(this, e); }; _logic.ViewModelChanged += (sender, e) => RaiseViewModelChanged(); _logic.ViewModelPropertyChanged += (sender, e) => { OnViewModelPropertyChanged(e); ViewModelPropertyChanged?.Invoke(this, e); }; _logic.DetermineViewModelInstance += (sender, e) => { e.ViewModel = GetViewModelInstance(e.DataContext); }; _logic.DetermineViewModelType += (sender, e) => { e.ViewModelType = GetViewModelType(e.DataContext); }; _logic.ViewLoading += (sender, e) => ViewLoading?.Invoke(this); _logic.ViewLoaded += (sender, e) => ViewLoaded?.Invoke(this); _logic.ViewUnloading += (sender, e) => ViewUnloading?.Invoke(this); _logic.ViewUnloaded += (sender, e) => ViewUnloaded?.Invoke(this); }
protected virtual void OnViewLoding() { ViewLoading?.Invoke(this, EventArgs.Empty); }