public MainWindowViewModel() { DatabaseReady = false; Router = new RoutingState(); Activator = new ViewModelActivator(); ShowMenu = false; dialogManager = Locator.Current.GetService <IDialogManager>(); saftValidator = Locator.Current.GetService <ISaftValidator>(); databaseService = Locator.Current.GetService <IDatabaseService>(); var canOpen = this.WhenValueChanged(x => x.DatabaseReady) .ObserveOn(RxApp.MainThreadScheduler); var canClearFiles = this.WhenAnyValue(x => x.RecentFiles, recentFiles => recentFiles != null && recentFiles.Count() > 0); ExitCommand = ReactiveCommand.Create(OnExit); OpenSaftCommand = ReactiveCommand.CreateFromTask(OnOpenSaft, canOpen); OpenTransportCommand = ReactiveCommand.Create(OnOpenTransport, canOpen); OpenStocksCommand = ReactiveCommand.CreateFromTask(OnOpenStocks, canOpen); OpenRecentFileCommand = ReactiveCommand.CreateFromTask <string>(OnOpenRecentSaftFile); OpenMenuSaftCommand = ReactiveCommand.Create <string>(OnOpenMenuSaft); OpenMenuStocksCommand = ReactiveCommand.Create <string>(OnOpenMenuStocks); OpenMenuTransportCommand = ReactiveCommand.Create <string>(OnOpenMenuTransport); ClearRecentFilesCommand = ReactiveCommand.Create(OnClearRecentFiles); OpenPemDialogCommand = ReactiveCommand.CreateFromTask(OnOpenPemDialog); OpenHashDialogCommand = ReactiveCommand.CreateFromTask(OnOpenHashDialog); MenuHeader = new string[] { "Erros", "Cabeçalho" }; MenuTables = new string[] { "Clientes", "Fornecedores", "Produtos", "Impostos" }; MenuInvoices = new string[] { "Documentos Faturação", "Pagamentos", "Documentos Conferência", "Documentos Movimentação" }; MenuStock = new string[] { "Cabeçalho", "Produtos", }; this.WhenActivated(disposables => { this.WhenValueChanged(x => x.SelectedSaftMenu) .InvokeCommand(OpenMenuSaftCommand) .DisposeWith(disposables); this.WhenValueChanged(x => x.SelectedStocksMenu) .InvokeCommand(OpenMenuStocksCommand) .DisposeWith(disposables); }); dialogManager.AddMessage("A iniciar base de dados"); Task.Run(() => { databaseService.InitDatabase(); dialogManager.AddMessage(""); var recentFiles = databaseService.GetRecentFiles(); var recentMenu = new List <MenuItemViewModel>( recentFiles.Select(r => new MenuItemViewModel { Header = r, Command = OpenRecentFileCommand, CommandParameter = r })) { new MenuItemViewModel { Header = "Limpar", Command = ClearRecentFilesCommand } }; RecentFiles = new ObservableCollection <MenuItemViewModel>(); var recentFilesMenu = new MenuItemViewModel[] { new MenuItemViewModel { Header = "_Recentes", Items = recentMenu } }; RecentFiles.AddRange(recentFilesMenu); DatabaseReady = true; }); dialogManager.UpdateVersionInfo(databaseService.GetAppVersion()); }