/// <summary> /// Initializes a new instance of the <see cref="PhoneApplicationPage"/> class. /// </summary> /// <remarks> /// It is not possible to inject view models (actually, you can't even /// pass view models during navigation in Windows Phone 7). /// </remarks> public PhoneApplicationPage() { if (Catel.Environment.IsInDesignMode) { return; } var viewModelType = GetViewModelType(); if (viewModelType == null) { Log.Debug("GetViewModelType() returned null, using the ViewModelLocator to resolve the view model"); viewModelType = _viewModelLocator.ResolveViewModel(GetType()); if (viewModelType == 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 PhoneApplicationPageLogic(this, viewModelType); _logic.TargetControlPropertyChanged += (sender, e) => { OnPropertyChanged(e.FxEventArgs); PropertyChanged.SafeInvoke(this, new PropertyChangedEventArgs(e.PropertyName)); }; _logic.ViewModelChanged += (sender, e) => { OnViewModelChanged(); ViewModelChanged.SafeInvoke(this, e); PropertyChanged.SafeInvoke(this, new PropertyChangedEventArgs("ViewModel")); }; _logic.ViewModelPropertyChanged += (sender, e) => { OnViewModelPropertyChanged(e); ViewModelPropertyChanged.SafeInvoke(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.SafeInvoke(this); _logic.ViewLoaded += (sender, e) => ViewLoaded.SafeInvoke(this); _logic.ViewUnloading += (sender, e) => ViewUnloading.SafeInvoke(this); _logic.ViewUnloaded += (sender, e) => ViewUnloaded.SafeInvoke(this); _logic.Tombstoning += (sender, e) => OnTombstoning(); _logic.Tombstoned += (sender, e) => OnTombstoned(); _logic.RecoveringFromTombstoning += (sender, e) => OnRecoveringFromTombstoning(); _logic.RecoveredFromTombstoning += (sender, e) => OnRecoveredFromTombstoning(); ViewModelChanged.SafeInvoke(this); Loaded += (sender, e) => OnLoaded(e); Unloaded += (sender, e) => OnUnloaded(e); }
/// <summary> /// Initializes a new instance of the <see cref="PhoneApplicationPage"/> class. /// </summary> /// <remarks> /// It is not possible to inject view models (actually, you can't even /// pass view models during navigation in Windows Phone 7). /// </remarks> public PhoneApplicationPage() { if (Catel.Environment.IsInDesignMode) { return; } var viewModelType = GetViewModelType(); if (viewModelType == null) { Log.Debug("GetViewModelType() returned null, using the ViewModelLocator to resolve the view model"); viewModelType = _viewModelLocator.ResolveViewModel(GetType()); if (viewModelType == 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 PhoneApplicationPageLogic(this, viewModelType); _logic.TargetControlPropertyChanged += (sender, e) => { OnPropertyChanged(e.FxEventArgs); PropertyChanged.SafeInvoke(this, new PropertyChangedEventArgs(e.PropertyName)); }; _logic.ViewModelChanged += (sender, e) => { OnViewModelChanged(); ViewModelChanged.SafeInvoke(this, e); PropertyChanged.SafeInvoke(this, new PropertyChangedEventArgs("ViewModel")); }; _logic.ViewModelPropertyChanged += (sender, e) => { OnViewModelPropertyChanged(e); ViewModelPropertyChanged.SafeInvoke(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.SafeInvoke(this); _logic.ViewLoaded += (sender, e) => ViewLoaded.SafeInvoke(this); _logic.ViewUnloading += (sender, e) => ViewUnloading.SafeInvoke(this); _logic.ViewUnloaded += (sender, e) => ViewUnloaded.SafeInvoke(this); _logic.Tombstoning += (sender, e) => OnTombstoning(); _logic.Tombstoned += (sender, e) => OnTombstoned(); _logic.RecoveringFromTombstoning += (sender, e) => OnRecoveringFromTombstoning(); _logic.RecoveredFromTombstoning += (sender, e) => OnRecoveredFromTombstoning(); ViewModelChanged.SafeInvoke(this); Loaded += (sender, e) => OnLoaded(e); Unloaded += (sender, e) => OnUnloaded(e); }