IEnumerable ITreeViewAdvisor.GetNodes(object treeNodeData)
        {
            if (treeNodeData == null)
            {
                return(null);
            }

            if (_treeViewItem.ItemCollection.Count > 0)
            {
                return(_generator.GetExplicitItem(treeNodeData)?.ItemCollection);
            }

            var evaluator = GetEvaluator(treeNodeData.GetType());

            if (evaluator.SourceEvaluator.IsEmpty == false)
            {
                // ReSharper disable once ImpureMethodCallOnReadonlyValueField
                return(evaluator.SourceEvaluator.GetValue(treeNodeData) as IEnumerable);
            }

            if (_sourceBinding == null)
            {
                return(_staticSource);
            }

            _treeViewItem.DataContext = treeNodeData;

            BindingUtil.EnsureBindingAttached(_treeViewItem, TreeViewItem.SourceCollectionProperty);

            var itemsSource = _treeViewItem.SourceCollection;

            _treeViewItem.DataContext = null;

            return(itemsSource);
        }
        bool ITreeViewAdvisor.IsExpanded(object treeNodeData)
        {
            if (treeNodeData == null)
            {
                return(false);
            }

            var evaluator = GetEvaluator(treeNodeData.GetType());

            if (evaluator.IsExpandedEvaluator.IsEmpty == false)
            {
                // ReSharper disable once ImpureMethodCallOnReadonlyValueField
                var value = evaluator.IsExpandedEvaluator.GetValue(treeNodeData);

                return(value as bool? ?? false);
            }

            if (_isExpandedBinding == null)
            {
                return(_staticIsExpanded);
            }

            _treeViewItem.DataContext = treeNodeData;

            BindingUtil.EnsureBindingAttached(_treeViewItem, TreeViewItem.IsExpandedProperty);

            var isExpanded = _treeViewItem.IsExpanded;

            _treeViewItem.DataContext = null;

            return(isExpanded);
        }