private void RenderRule([NotNull] XElement ruleElement, int index)
        {
            Debug.ArgumentNotNull(ruleElement, nameof(ruleElement));

            var listBoxItem = new ListBoxItem();

            Listbox.Items.Add(listBoxItem);

            var rule = new RuleListBoxItem
            {
                Element = ruleElement,
                Index   = index
            };

            listBoxItem.Content = rule;
            listBoxItem.Tag     = ruleElement;

            var elements   = new List <XElement>();
            var conditions = ruleElement.Element(@"conditions");

            if (conditions != null)
            {
                RuleModel.Flatten(conditions, elements, @"or", string.Empty);
                RenderConditions(rule, elements);
                RuleModel.RemoveOperatorAttributes();
            }

            var actions = ruleElement.Element(@"actions");

            if (actions != null)
            {
                RenderActions(rule, actions.Elements());
            }
        }
        private void RenderConditions([NotNull] RuleListBoxItem rule, [NotNull] IEnumerable <XElement> elements)
        {
            Debug.ArgumentNotNull(rule, nameof(rule));
            Debug.ArgumentNotNull(elements, nameof(elements));

            var list = elements.ToList();

            var index = 0;
            var count = list.Count();

            foreach (var element in list)
            {
                RenderCondition(rule, element, index, count);
                index++;
            }
        }
        private void RenderAction([NotNull] RuleListBoxItem rule, [NotNull] XElement element, int index, int actionCount)
        {
            Debug.ArgumentNotNull(rule, nameof(rule));
            Debug.ArgumentNotNull(element, nameof(element));

            var listBoxItem = new ListBoxItem();

            Listbox.Items.Add(listBoxItem);

            var action = new ActionListBoxItem(this, element, index, IsEditable)
            {
                CanMoveUp   = index > 0,
                CanMoveDown = index < actionCount - 1
            };

            listBoxItem.Content = action;
            listBoxItem.Tag     = element;
        }
        private void RenderCondition([NotNull] RuleListBoxItem rule, [NotNull] XElement element, int index, int conditionCount)
        {
            Debug.ArgumentNotNull(rule, nameof(rule));
            Debug.ArgumentNotNull(element, nameof(element));

            var listBoxItem = new ListBoxItem();

            Listbox.Items.Add(listBoxItem);

            var item = new ConditionListBoxItem(this, element, index, IsEditable);

            item.ToggleExcept   += ToggleExcept;
            item.ToggleOperator += ToggleOperator;
            item.CanMoveUp       = index > 0;
            item.CanMoveDown     = index < conditionCount - 1;

            listBoxItem.Content = item;
            listBoxItem.Tag     = element;
        }