/// <summary>
        /// Awaitable function that shows all controls to create a new <see cref="Article"/>.\n
        /// Generates a new <see cref="ArticleEditViewModel"/>, tries to get the next <see cref="ArticleID"/> and calls <see cref="AddTabContentViewModel"/> to add the viewmodel to the window.\n
        /// Calls <see cref="Interface.IEditObserver.ReceiveArticleEditViewModel"/> for each registered <see cref="IEditObserver"/> in this instance.
        /// </summary>
        /// <param name="sender"></param>
        /// <returns></returns>
        public async Task ReceiveNewArticleCommand(object sender)
        {
            var tempid = await ParentViewModel.Database.GetNextArticleID();
            var articleEditViewModel = new ArticleView.Contextual.ArticleEditViewModel(this, tempid);
            ParentViewModel.AddTabContentViewModel(articleEditViewModel);
            articleEditViewModel.RibbonTabItem.IsSelected = true;

            foreach (var observer in registeredObservers)
                observer.ReceiveArticleEditViewModel(articleEditViewModel);
        }
        /// <summary>
        /// Awaitable function that either shows all controls to modify an existing <see cref="Article"/> or loads the selected <see cref="Article"/> and uses <see cref="ReceiveData"/> of the viewmodel referenced <see cref="ReceiveRequestArticleCommand"/>.\n
        /// Calls <see cref="Interface.IEditObserver.ReceiveArticleEditViewModel"/> for each registered <see cref="IEditObserver"/> in this instance when <see cref="ViewModelRequestingArticle"/> is null.
        /// </summary>
        /// <param name="sender"></param>
        /// <returns></returns>
        public async Task ReceiveEditArticleCommand(object sender)
        {
            if (SelectedArticle != null)
            {
                if (ViewModelRequestingArticle == null)
                {
                    var temp = await ParentViewModel.Database.GetArticle(SelectedArticle.ArticleID);
                    var articleEditViewModel = new ArticleView.Contextual.ArticleEditViewModel(this, temp);
                    ParentViewModel.AddTabContentViewModel(articleEditViewModel);
                    articleEditViewModel.RibbonTabItem.IsSelected = true;

                    foreach (var observer in registeredObservers)
                        observer.ReceiveArticleEditViewModel(articleEditViewModel);
                }
                else
                {
                    var temp = await ParentViewModel.Database.GetArticle(SelectedArticle.ArticleID);
                    ViewModelRequestingArticle.ReceiveData(temp);
                    ParentViewModel.SelectedContent = ViewModelRequestingArticle.TabContent;
                    ViewModelRequestingArticle = null;
                }
            }
        }