/** * Steamless - Copyright (c) 2015 - 2019 atom0s [atom0s@live.com] * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. * * By using Steamless, you agree to the above license and its terms. * * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were * made. You must do so in any reasonable manner, but not in any way that suggests the licensor * endorses you or your use. * * Non-Commercial - You may not use the material (Steamless) for commercial purposes. * * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the * modified material. You are, however, allowed to submit the modified works back to the original * Steamless project in attempt to have it added to the original project. * * You may not apply legal terms or technological measures that legally restrict others * from doing anything the license permits. * * No warranties are given. */ namespace Steamless.API.Model { using System; using System.ComponentModel; using System.Windows; public abstract class ViewModelBase : NotifiableModel { /// /// Default Constructor /// protected ViewModelBase() { this.Events = new EventHandlerList(); } /// /// Internal static design mode flag. /// private static bool? m_IsInDesignMode; /// /// Gets if this ViewModelBase is in design mode. /// public bool IsInDesignMode => IsInDesignModeStatic; /// /// Gets the static ViewModelBase design mode flag. /// public static bool IsInDesignModeStatic { get { if (m_IsInDesignMode.HasValue) return m_IsInDesignMode.Value; var isInDesignModeProperty = DesignerProperties.IsInDesignModeProperty; m_IsInDesignMode = (bool)DependencyPropertyDescriptor.FromProperty(isInDesignModeProperty, typeof(FrameworkElement)).Metadata.DefaultValue; return m_IsInDesignMode.Value; } } /// /// Gets or sets the internal event handler list. /// private EventHandlerList Events { get { return this.Get("Events"); } set { this.Set("Events", value); } } /// /// Event to subscribe to to be notified when a view is navigated from. /// public event EventHandler NavigatedFrom { add { this.Events.AddHandler("NavigatedFromEvent", value); } remove { this.Events.RemoveHandler("NavigatedFromEvent", value); } } /// /// Event to subscribe to to be notified when a view is navigated to. /// public event EventHandler NavigatedTo { add { this.Events.AddHandler("NavigatedToEvent", value); } remove { this.Events.RemoveHandler("NavigatedToEvent", value); } } /// /// Internal navigated from event invoker. /// /// public void OnNavigatedFrom(NavigatedEventArgs e) { var eventHandler = (EventHandler)this.Events["NavigatedFromEvent"]; eventHandler?.Invoke(this, e); } /// /// Internal navigated to event invoker. /// /// public void OnNavigatedTo(NavigatedEventArgs e) { var eventHandler = (EventHandler)this.Events["NavigatedToEvent"]; eventHandler?.Invoke(this, e); } } }