public void AddNewDirectories(object parameter) { IEnumerable<FinderNode> directoryNodeInSelection = SelectedNodes.Where(x => x.Type == NodeType.FORDER); var newNode = new FinderNode(NodeType.FORDER) { Name = "New Directory" }; if (directoryNodeInSelection.Count() != 0) _finderDirector.Add(directoryNodeInSelection.First(), newNode); else _finderDirector.Add(newNode); }
public bool Contains(FinderNode node) { if (node.Type == NodeType.PRODUCT && string.IsNullOrEmpty(node.ItemID)) throw new ArgumentException(); return _nodes.Any(x => x.Descendants().Contains(node)) || //이미 자식루트에서 가지고 있는 경우 _nodes.Contains(node) || //ROOT에서 가지고 있을 경우 _nodes.SelectMany(x => x.Descendants().Where(y => y.Type == NodeType.PRODUCT)).Any(x => x.ItemID == node.ItemID); //동일한 item 유니크키를 가지고 있는 경우 }
public bool Remove(FinderNode node) { if (!Contains(node)) return false; ObservableCollection<FinderNode> copy = new ObservableCollection<FinderNode>(_nodes); FinderNode parent = copy.SelectMany(x => x.Descendants()).Where(x => x.Nodes.Contains(node)).SingleOrDefault(); if (parent != null) return parent.Nodes.Remove(node); else return _nodes.Remove(node); //부모를 못 찾으면 마스터 루트에 있는 것. }
private void OnValueChanged(IControl next) { if (next == null || _ancestorType.IsAssignableFrom(next.GetType().GetTypeInfo())) _subject.OnNext(next); else { _child?.Dispose(); _child = new FinderNode(next, _ancestorType); _child.Observable.Subscribe(OnChildValueChanged); _child.Init(); } }
/// <summary> /// Delegate called on value changes. /// </summary> /// <param name="next">The next control.</param> private void OnValueChanged(IControl next) { if (next == null || _ancestorType.IsAssignableFrom(next.GetType().GetTypeInfo())) { _subject.OnNext(next); } else { _child?.Dispose(); _child = new FinderNode(next, _ancestorType); _child.Observable.Subscribe(OnChildValueChanged); _child.Init(); } }
public static IObservable <IStyledElement?> Create(IStyledElement control, Type ancestorType) { return(new AnonymousObservable <IStyledElement?>(observer => { var finder = new FinderNode(control, ancestorType); var subscription = finder.Observable.Subscribe(observer); finder.Init(); return Disposable.Create(() => { subscription.Dispose(); finder.Dispose(); }); })); }
private void AddNode(FinderNode node, int index, FinderNode newNode) { ObservableCollection<FinderNode> children = (node == null) ? _viewModel.Nodes : node.Nodes; if (index == -1) { children.Add(newNode); } else { if (0 <= index && index < children.Count()) children.Insert(index, newNode); else children.Add(newNode); } }
public static IObservable<IControl> Create(IControl control, Type ancestorType) { return new AnonymousObservable<IControl>(observer => { var finder = new FinderNode(control, ancestorType.GetTypeInfo()); var subscription = finder.Observable.Subscribe(observer); finder.Init(); return Disposable.Create(() => { subscription.Dispose(); finder.Dispose(); }); }); }
public void Add(FinderNode parent, FinderNode child) { if (!Contains(child) && Contains(parent)) parent.Nodes.Add(child); }
public void Add(FinderNode node) { if (!Contains(node)) _nodes.Add(node); }