using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Composition; using System.Threading.Tasks; using System.Windows; using DTS.Common.Events; using DTS.Common.Interface; using Microsoft.Practices.Prism.Events; using Microsoft.Practices.Prism.Interactivity.InteractionRequest; using Microsoft.Practices.Unity; using DTS.Common.Utils; using Microsoft.Practices.Prism.Regions; using Microsoft.Practices.Prism.ViewModel; using DTS.Common.Base; namespace DTS.Viewer.Loader { [Export(typeof(IShellView))] [PartCreationPolicy(CreationPolicy.Shared)] public class ShellViewModel : IShellViewModel { //BaseViewModel, public IShellView View { get; private set; } private IEventAggregator _eventAggregator { get; set; } private IRegionManager _regionManager; private IUnityContainer _unityContainer { get; set; } public InteractionRequest NotificationRequest { get; private set; } public InteractionRequest ConfirmationRequest { get; private set; } /// /// Creates a new instance of the TechnologyDomainEditViewModel. /// /// The ShellView View. /// The logical placeholder defined within the application's UI (in the shell or within views) into which views are displayed. /// The EventAggregator which allows different components to publish/subscribe to events without being coupled to each other. /// The unityContainer. public ShellViewModel(IShellView view, IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer) //: base(regionManager, eventAggregator, unityContainer) { View = view; View.DataContext = this; NotificationRequest = new InteractionRequest(); ConfirmationRequest = new InteractionRequest(); _eventAggregator = eventAggregator; _unityContainer = unityContainer; _regionManager = regionManager; _eventAggregator.GetEvent().Subscribe(OnRaiseNotification); //LoadViewer(); } #region Methods public void Initialize() { } public void Initialize(object parameter) { } public void Activated() { } /// /// Private Event handler for RaiseNotification event. /// private void OnRaiseNotification(NotificationContentEventArgs eventArgsWithTitle) { // The NotificationRequest.Raise triggers the Invoke() method of the .Infrastructure.PopupWindowAction object to show the .Infrastructure.NotificationWindow window // Notification object expects a NotificationContentEventArgsWithoutTitle object and a Title string. var eventArgsWithoutTitle = new NotificationContentEventArgs(eventArgsWithTitle.Message, eventArgsWithTitle.MessageDetails, eventArgsWithTitle.Image); NotificationRequest.Raise(new Notification { Content = eventArgsWithoutTitle, Title = eventArgsWithTitle.Title }); } private void LoadViewer() { var viewerView = _unityContainer.Resolve(); var viewerViewModel = _unityContainer.Resolve(); viewerView.DataContext = viewerViewModel; ((ShellView)viewerView).Visibility = Visibility.Visible; } public void Cleanup() { throw new NotImplementedException(); } public Task CleanupAsync() { throw new NotImplementedException(); } public Task InitializeAsync() { throw new NotImplementedException(); } public Task InitializeAsync(object parameter) { throw new NotImplementedException(); } #endregion #region ContextRegion /// /// Returns all regions in the main grid /// /// public List GetRegions() { var items = new List(); Utils.GetChildrenByName(((ShellView)View).MainShell, "Region", ref items); return items; } public Object ContextMainRegion { get { return ((ShellView)View).MainRegion.Content; } set { ((ShellView)View).MainRegion.Content = value; OnPropertyChanged("ContextMainRegion"); } } #endregion #region Properties private double _width; public double Width { get { return _width; } set { _width = value; }} private double _height; public double Height { get { return _height; } set { _height = value; } } private bool _isMenuIncluded = false; public bool IsMenuIncluded { get { return _isMenuIncluded; } set { _isMenuIncluded = value; OnPropertyChanged("IsMenuIncluded"); } } private bool _isNavigationIncluded = false; public bool IsNavigationIncluded { get { return _isNavigationIncluded; } set { _isNavigationIncluded = value; OnPropertyChanged("IsNavigationIncluded"); } } /// /// Gets the HeaderInfo. /// public string HeaderInfo { get { return "MainRegion"; } } public bool IsBusy { get; set; } public bool IsDirty { get; } /// ///Occurs when a property value changes. /// public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { var eventHandler = PropertyChanged; if (eventHandler != null) { eventHandler(this, new PropertyChangedEventArgs(propertyName)); } } #endregion Properties } }