private NodeType GetNodeTypeFromConditionalNodeType(ConditionalNodeType type)
 {
     return(type switch
     {
         ConditionalNodeType.Test => NodeType.Test,
         ConditionalNodeType.IfTrue => NodeType.IfTrue,
         ConditionalNodeType.IfFalse => NodeType.IfFalse,
         _ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
     });
        private NodeType GetNodeTypeFromConditionalNodeType(ConditionalNodeType type)
        {
            switch (type)
            {
            case ConditionalNodeType.Test:
                return(NodeType.Test);

            case ConditionalNodeType.IfTrue:
                return(NodeType.IfTrue);

            case ConditionalNodeType.IfFalse:
                return(NodeType.IfFalse);

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
        internal void AddAffectedNode(ConditionalNodeType type, DependencyNode node)
        {
            if (type == ConditionalNodeType.None)
            {
                throw new InvalidOperationException($"Can not add a node that is {ConditionalNodeType.None} type to the affected node collection. ");
            }

            // The root node is the constant node, so it will never be updated.
            if (node.IsRoot)
            {
                return;
            }

            var nodeType = GetNodeTypeFromConditionalNodeType(type);

            if (!_allNodes.ContainsKey(node))
            {
                _allNodes.Add(node, nodeType);
            }

            _allNodes[node] |= nodeType;
        }