public NodeViewModel(IISOViewModel vm, TreeViewModel owner)
            {
                _vm = vm;
                _owner = owner;
                if(_vm != null && _vm.Properties != null)
                    foreach (var property in _vm.Properties)
                    {
                        _propertyVMs.Add(_owner.addOrRetrieveISOVM(property));
                    }

                _childNodes = new List<NodeViewModel>();
                var firstChilld = _vm.Children.FirstOrDefault();
                if (firstChilld != null)
                {
                    var childVM = _owner.addOrRetrieveISOVM(firstChilld);
                    var node = _owner.addOrRetrieveNode(childVM);
                    _childNodes.Add(node);
                }
            }
            public NodeViewModel(IISOViewModel vm, TreeViewModel owner)
            {
                _vm    = vm;
                _owner = owner;
                if (_vm != null && _vm.Properties != null)
                {
                    foreach (var property in _vm.Properties)
                    {
                        _propertyVMs.Add(_owner.addOrRetrieveISOVM(property));
                    }
                }

                _childNodes = new List <NodeViewModel>();
                var firstChilld = _vm.Children.FirstOrDefault();

                if (firstChilld != null)
                {
                    var childVM = _owner.addOrRetrieveISOVM(firstChilld);
                    var node    = _owner.addOrRetrieveNode(childVM);
                    _childNodes.Add(node);
                }
            }
            protected void performExpansion()
            {
                bool childrenChanged = false;

                if (BelowOrIsGenerator() && !_owner.TruncateDataItems)
                {
                    foreach (var iso in _vm.Children)
                    {
                        var childVM   = _owner.addOrRetrieveISOVM(iso);
                        var childNode = _owner.addOrRetrieveNode(childVM);
                        if (!_childNodes.Contains(childNode))
                        {
                            childrenChanged = true;
                            _childNodes.Add(childNode);
                        }
                    }
                }
                if (childrenChanged)
                {
                    notifyChildrenChanged();
                }
            }