/// <summary> /// Reseta o enumerador. /// </summary> public void Reset() { _current = null; if (_itemEnumerator != null) { _itemEnumerator.Reset(); } }
public void Dispose() { if (_itemEnumerator is IDisposable) { ((IDisposable)_itemEnumerator).Dispose(); } _current = null; _itemEnumerator = null; }
/// <summary> /// Libera a instancia. /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { _firstChild = null; _owner = null; _left = null; _right = null; if (_item is System.ComponentModel.INotifyPropertyChanged) { ((System.ComponentModel.INotifyPropertyChanged)_item).PropertyChanged -= ItemPropertyChanged; } }
/// <summary> /// Cria um nó filho. /// </summary> /// <param name="owner"></param> /// <param name="left">Nó da esquerda.</param> /// <param name="item"></param> private TreeViewSourceNode(TreeViewSourceNode owner, TreeViewSourceNode left, object item) { _owner = owner; _left = left; _item = item; if (item is System.ComponentModel.INotifyPropertyChanged) { ((System.ComponentModel.INotifyPropertyChanged)item).PropertyChanged += ItemPropertyChanged; } Initialize(); }
private TreeViewSource(System.Collections.IEnumerable items, Func <object, object> keyGetter, string keyPropertyName, Func <object, object> ownerKeyGetter, string ownerKeyPropertyName, Func <object, IMessageFormattable> nameGetter, string namePropertyName, object rootItem, bool isInitializeExpanded, bool isLazyLoad, System.Collections.IEqualityComparer keyEqualityComparer) { items.Require("items"); _items = items; _keyGetter = keyGetter; _keyPropertyName = keyPropertyName; _ownerKeyGetter = ownerKeyGetter; _ownerPropertyName = ownerKeyPropertyName; _nameGetter = nameGetter; _namePropertyName = namePropertyName; _isInitializeExpanded = isInitializeExpanded; _keyEqualityComparer = keyEqualityComparer; _isLazyLoad = isLazyLoad; _collectionChangedHandlers = new Dictionary <NotifyCollectionChangedEventHandler, CollectionChangedWrapperEventData>(); _root = new TreeViewSourceNode(this, rootItem); _root.CollectionChanged += RootCollectionChanged; }
/// <summary> /// Move para o próximo nó. /// </summary> public bool MoveNext() { var oldCount = _node._count; if (_tree == null) { return(false); } if (_tree.IsLazyLoad && !_node.IsExpanded) { if (_current == null) { _current = TreeViewSourceNode.Empty; return(true); } return(false); } if (_itemEnumerator == null) { _node.FirstChild = null; if (_tree.Items is IIndexedObservableCollection) { var indexedCollection = ((IIndexedObservableCollection)_tree.Items); if (indexedCollection.ContainsIndex(_tree.OwnerPropertyName, DefaultIndexType)) { _itemEnumerator = indexedCollection.Search(_tree.OwnerPropertyName, DefaultIndexType, _node.Key).GetEnumerator(); _isOwnerPropertyIndexed = true; } else { _isOwnerPropertyIndexed = false; } } else { _isOwnerPropertyIndexed = false; } if (!_isOwnerPropertyIndexed) { _itemEnumerator = _tree.Items.GetEnumerator(); } } object ownerKey = null; while (_itemEnumerator.MoveNext()) { if (!_isOwnerPropertyIndexed) { ownerKey = _tree.GetOwnerKey(_itemEnumerator.Current); } if (_isOwnerPropertyIndexed || KeysEquals(_tree, _node.Key, ownerKey)) { var old = _current; _current = new TreeViewSourceNode(_current == null ? _node : null, _current == null ? null : _current, _itemEnumerator.Current); if (_node.FirstChild == null) { _node.FirstChild = _current; } if (old != null) { old.Right = _current; } _node._count++; return(true); } } _node._isEmpty = (_node._count == 0); if (_node._count != oldCount) { _node.RaisePropertyChanged("Count"); } return(false); }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="node"></param> public Enumerator(TreeViewSourceNode node) { _tree = node.GetTree(); _node = node; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="owner"></param> public ReentracyMonitor(TreeViewSourceNode owner) { _owner = owner; lock (_owner._reentrancyThreads) _owner._reentrancyThreads.Add(System.Threading.Thread.CurrentThread); }