public Int32 _Main()
        {
            Int32 returnValue = -1; //default to fail code

            try
            {
                ViewModel.StatusMessage = String.Format("{0} starting...", ViewName);

                //init settigns

                ViewModel.StatusMessage = String.Format("{0} started.", ViewName);

                _Run();

                ViewModel.StatusMessage = String.Format("{0} completing...", ViewName);

                DisposeSettings();

                ViewModel.StatusMessage = String.Format("{0} completed.", ViewName);

                //return success code
                returnValue = 0;
            }
            catch (Exception ex)
            {
                ViewModel.ErrorMessage = String.Format("{0} did NOT complete: '{1}'", ViewName, ViewModel.ErrorMessage);
                Log.Write(ex, MethodBase.GetCurrentMethod(), EventLogEntryType.Error);
            }
            finally
            {
                ViewModel = null;
            }
            return(returnValue);
        }
        protected void InitViewModel()
        {
            Dictionary <String, String> d = default(Dictionary <String, String>);

            try
            {
                //tell controller how model should notify view about non-persisted properties AND including model properties that may be part of settings
                ModelController <MVCModel> .DefaultHandler = PropertyChangedEventHandlerDelegate;

                //tell controller how settings should notify view about persisted properties
                SettingsController <MVCSettings> .DefaultHandler = PropertyChangedEventHandlerDelegate;

                InitModelAndSettings();

#if USE_CUSTOM_VIEWMODEL
                //class to handle standard behaviors
                d = new Dictionary <String, String>();
                d.Add("New", "New");
                d.Add("Save", "Save");
                d.Add("Open", "Open");
                d.Add("Print", "Print");
                d.Add("Copy", "Copy");
                d.Add("Properties", "Properties");

                ViewModelController <String, MVCConsoleViewModel> .New
                (
                    ViewName,
                    new MVCConsoleViewModel
                    (
                        this.PropertyChangedEventHandlerDelegate,
                        d
                    )
                );

                //select a viewmodel by view name
                ViewModel =
                    ViewModelController <String, MVCConsoleViewModel> .ViewModel[ViewName];
#else
                //class to handle standard behaviors
                ViewModelController <String, ConsoleViewModel <String, MVCSettings, MVCModel> > .New
                (
                    ViewName,
                    new ConsoleViewModel <String, MVCSettings, MVCModel>
                    (
                        this.PropertyChangedEventHandlerDelegate,
                        new Dictionary <String, String>()
                {
                    { "New", "New" },
                    { "Save", "Save" },
                    { "Open", "Open" },
                    { "Print", "Print" },
                    { "Copy", "Copy" },
                    { "Properties", "Properties" }
                }
                    )
                );

                //select a viewmodel by view name
                ViewModel =
                    ViewModelController <String, ConsoleViewModel <String, MVCSettings, MVCModel> > .ViewModel[ViewName];
#endif

                //Init config parameters
                if (!LoadParameters())
                {
                    throw new Exception(String.Format("Unable to load config file parameter(s)."));
                }

                //DEBUG:filename coming in is being converted/passed as DOS 8.3 format equivalent
                //Load
                if ((SettingsController <MVCSettings> .FilePath == null) || (SettingsController <MVCSettings> .Filename == SettingsController <MVCSettings> .FILE_NEW))
                {
                    //NEW
                    ViewModel.FileNew();
                }
                else
                {
                    //OPEN
                    ViewModel.FileOpen();
                }
            }
            catch (Exception ex)
            {
                if (ViewModel != null)
                {
                    ViewModel.ErrorMessage = ex.Message;
                }
                Log.Write(ex, MethodBase.GetCurrentMethod(), EventLogEntryType.Error);
            }
        }