private void Databases_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { foreach (var database in SessionData.Current.Databases) { var dbNav = new DbNavigationNode { InstanceId = database.InstanceId, Name = database.Name, NodeType = DbNavigationNodeType.Database }; foreach (var collection in database.Collections) { var nodeType = collection is FileCollectionReference ? DbNavigationNodeType.FileCollection : DbNavigationNodeType.Collection; dbNav.AddChildren(new DbNavigationNode { InstanceId = collection.InstanceId, Name = collection.Name, NodeType = nodeType }); } AddDatabase(dbNav); } } else if (e.Action == NotifyCollectionChangedAction.Remove) { if (e.OldItems == null) { return; } var indexToRemove = new HashSet <nuint>(); foreach (var dbRef in e.OldItems.OfType <DatabaseReference>()) { for (nuint i = 0; i < _databases.Count; i++) { var dbNavNode = _databases.GetItem <DbNavigationNode>(i); if (dbNavNode != null && dbNavNode.InstanceId.Equals(dbRef.InstanceId)) { indexToRemove.Add(i); } } } foreach (var index in indexToRemove) { RemoveDatabase((nint)index); } } else if (e.Action == NotifyCollectionChangedAction.Reset) { ClearDatabases(); } }
public void InsertDatabase(DbNavigationNode node, nint index) { WillChangeValue(nameof(Databases)); _databases.Insert(node, index); DidChangeValue(nameof(Databases)); }
public void AddDatabase(DbNavigationNode node) { WillChangeValue(nameof(Databases)); _databases.Add(node); DidChangeValue(nameof(Databases)); }