private void AddControlMenuItem_Click(object sender, RoutedEventArgs e)
        {
            if (_viewModel.SelectedElement == null)
            {
                return;
            }

            if (!(_viewModel.SelectedElement is CombinedElementViewModel combined))
            {
                MessageBox.Show($"Selected Element: {_viewModel.SelectedElement.Name} is not nested from CombinedElementViewModel. But has to");
                return;
            }

            var model = WebFactory.CreateCombinedElementModel();

            var dialog = new WebElementDetailsWindow(model, combined.GetExistedNames(), false);

            if (dialog.ShowDialog() != true)
            {
                return;
            }

            if (combined.Elements == null)
            {
                combined.Elements = new ObservableCollection <WebElementViewModel>();
            }
            model.Parent = combined;
            combined.Elements.Add(model);

            _viewModel.SelectedElement = model;
        }
        private void AddDropDownMenuItem_Click(object sender, RoutedEventArgs e)
        {
            if (_viewModel.SelectedElement == null)
            {
                return;
            }

            if (!(_viewModel.SelectedElement is CombinedElementViewModel combined))
            {
                MessageBox.Show($"Selected Element: {_viewModel.SelectedElement.Name} is not nested from CombinedElementViewModel. But has to");
                return;
            }

            var model = WebFactory.CreateDropDownElementModel();

            var dialog = new WebElementDetailsWindow(model, combined.GetExistedNames(), false);

            if (dialog.ShowDialog() != true)
            {
                return;
            }

            var ddName = model.Name.Replace("DropDown", "").Trim();

            var input = model.Elements.First(el => el.InnerKey == DropDownElementInfo.Keys.Input);

            input.Name = $"{ddName} Input";

            dialog = new WebElementDetailsWindow(input, model.GetExistedNames(), true);
            if (dialog.ShowDialog() != true)
            {
                return;
            }

            var option = model.Elements.First(el => el.InnerKey == DropDownElementInfo.Keys.Option);

            option.Name = $"{ddName} Option";

            dialog = new WebElementDetailsWindow(option, model.GetExistedNames(), true);
            if (dialog.ShowDialog() != true)
            {
                return;
            }


            if (combined.Elements == null)
            {
                combined.Elements = new ObservableCollection <WebElementViewModel>();
            }
            model.Parent = combined;
            combined.Elements.Add(model);

            _viewModel.SelectedElement = model;
        }
        private void AddContextMenuItem_Click(object sender, RoutedEventArgs e)
        {
            var contextModel = WebFactory.CreateWebContextModel();
            var dialog       = new WebElementDetailsWindow(contextModel, _viewModel.GetExistedNames(), false);

            if (dialog.ShowDialog() != true)
            {
                return;
            }

            _viewModel.Elements.Add(contextModel);
        }
        private void EditMenuItem_Click(object sender, RoutedEventArgs e)
        {
            if (_viewModel.SelectedElement == null)
            {
                return;
            }

            List <string> existedNames = null;

            if (_viewModel.SelectedElement is WebContextViewModel)
            {
                existedNames = _viewModel.GetExistedNames();
            }
            else
            {
                var parent = _viewModel.SelectedElement.Parent;
                if (parent == null)
                {
                    MessageBox.Show($"Selected Element: {_viewModel.SelectedElement.Name} doesn't have parent. But has to");
                    return;
                }
                if (parent is CombinedElementViewModel combined)
                {
                    existedNames = combined.GetExistedNames();
                }
                else
                {
                    MessageBox.Show($"Selected Element: {_viewModel.SelectedElement.Name} has parent that is not nested from CombinedElementViewModel. But has to");
                    return;
                }
            }

            var dialog = new WebElementDetailsWindow(_viewModel.SelectedElement, existedNames, true);

            if (dialog.ShowDialog() != true)
            {
                return;
            }
        }