/// <summary> /// BaseViewModel constructor. /// </summary> protected BaseViewModel() { _onInitSubscribers = new List <Guid>(); _onAppearingSubscribers = new List <Guid>(); Resolver = Application.Current.Resolve <IServiceResolver>(); Lifecycle = LifecycleState.Initiate; InitCommand = new XamAsyncCommand(() => { }); AppearingCommand = new XamAsyncCommand(() => { }); DisappearingCommand = new XamAsyncCommand(() => { }); CloseCommand = new XamAsyncCommand(async() => await CloseAsync()); LoadCommand = new XamAsyncCommand(() => { }); UnloadCommand = new XamAsyncCommand(() => { }); FocusCommand = new Command(() => { }); BackButtonPressed = new BackButtonCommand(x => Close()); ExecuteCommand = async command => { switch (command) { case IXamAsyncCommand a: await a.ExecuteAsync(); break; default: command?.Execute(null); break; } }; }
/// <summary> /// Execute command asynchronously. /// </summary> /// <param name="command">command</param> /// <returns>task</returns> public static Task ExecuteAsync(this ICommand command) { return(command switch { XamAsyncCommand cmd0 => cmd0.ExecuteAsync(), XamAsyncCommand <object> cmd1 => cmd1.ExecuteAsync(null), _ => throw new InvalidOperationException(nameof(command)) });