void Connectors_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: foreach (var item in e.NewItems) { var viewModel = new dynConnectorViewModel(item as dynConnectorModel); _connectors.Add(viewModel); } break; case NotifyCollectionChangedAction.Reset: _connectors.Clear(); break; case NotifyCollectionChangedAction.Remove: foreach (var item in e.OldItems) { _connectors.Remove(_connectors.First(x => x.ConnectorModel == item)); } break; } }
private void Connect(object parameter) { // if this is a if (!dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.IsConnecting) { //test if port already has a connection if so grab it //and begin connecting to somewhere else //don't allow the grabbing of the start connector if (_port.Connectors.Count > 0 && _port.Connectors[0].Start != _port) { //define the new active connector var c = new dynConnectorViewModel(_port.Connectors[0].Start); dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.ActiveConnector = c; dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.IsConnecting = true; //disconnect the connector model from its start and end ports //and remove it from the connectors collection. this will also //remove the view model var successfulRemoval = dynSettings.Controller.DynamoViewModel.CurrentSpace.Connectors.Remove(_port.Connectors[0]); _port.Connectors[0].NotifyConnectedPortsOfDeletion(); } else { try { //Create a connector view model to begin drawing if (_port.PortType != PortType.INPUT) { var c = new dynConnectorViewModel(_port); dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.ActiveConnector = c; dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.IsConnecting = true; } } catch (Exception ex) { Debug.WriteLine(ex.Message); } } } else // attempt to complete the connection { if (_port.PortType != PortType.INPUT) { return; } //remove connector if one already exists if (_port.Connectors.Count > 0) { var connToRemove = _port.Connectors[0]; dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.Model.Connectors.Remove( connToRemove); _port.Disconnect(connToRemove); var startPort = connToRemove.Start; startPort.Disconnect(connToRemove); } // create the new connector model var start = dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.ActiveConnector.ActiveStartPort; var end = _port; var newConnectorModel = dynConnectorModel.Make(start.Owner, end.Owner, start.Index, end.Index, 0); // the connector is invalid if (newConnectorModel == null) { return; } // Add to the current workspace dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.Model.Connectors.Add(newConnectorModel); // Cleanup dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.IsConnecting = false; dynSettings.Controller.DynamoViewModel.CurrentSpaceViewModel.ActiveConnector = null; } }