Category / Section
How to restrict Connector's source/target changing from native Nodes to other Nodes in WPF Diagram(SfDiagram)?
WPF Diagram (SfDiagram) supports restricting connector’s source and target changing from native nodes to other nodes. You can achieve your requirement by using ConnectorSourceChangedCommand/ConnectorSourceChangedEvent and ConnectorTargetChangedCommand/ConnectorTargetChangedEvent. When you are trying to change the source and the target nodes of a connector from its native nodes to any other nodes, then source and target nodes will be reset to the same source and target nodes using event arguments.
XAML
<!--Initialize the Sfdiagram-->
<syncfusion:SfDiagram x:Name="diagram"
Nodes="{Binding Nodes}"
Connectors="{Binding Connectors}"
ConnectorSourceChangedCommand="{Binding ConnectorSourceChangedCommand}"
ConnectorTargetChangedCommand="{Binding ConnectorTargetChangedCommand}">
</syncfusion:SfDiagram>
C#
//Adding Commands
ConnectorSourceChangedCommand = new DelegateCommand(OnConnectorSourceChangedCommand);
ConnectorTargetChangedCommand = new DelegateCommand(OnConnectorTargetChangedCommand);
//Method to execute ConnectorSourceChangedCommand.
private void OnConnectorSourceChangedCommand(object parameter)
{
var args = parameter as ChangeEventArgs<object, ConnectorChangedEventArgs>;
if (args.NewValue.Node == null && args.OldValue.Node != null)
{
NodeViewModel node = args.OldValue.Node as NodeViewModel;
//Reset source node when it is changed to null from source node.
(args.Item as ConnectorViewModel).SourceNode = node;
}
}
//Method to execute ConnectorTargetChangedCommand.
private void OnConnectorTargetChangedCommand(object parameter)
{
var args = parameter as ChangeEventArgs<object, ConnectorChangedEventArgs>;
if (args.NewValue.Node == null && args.OldValue.Node != null)
{
NodeViewModel node = args.OldValue.Node as NodeViewModel;
//Reset target node when it is changed to null from target node.
(args.Item as ConnectorViewModel).TargetNode = node;
}
}