Hi,
I am overriding the Addlink method of my custom graphsource object that is derived the ObservableGraphSourceBase<NodeViewModelBase, MyLink>. I want to control the creation of the link on certain conditions. If the conditions are met, I call the base.AddLink() method, otherwise I want to prevent the creation of link. How can I do this?
I tried not calling base.AddLink() but the link still appears on the diagram while it is not contained in the graphsource. How can I prevent or delete this link to be shown on the diagram?
Thanks,
Semih
I am overriding the Addlink method of my custom graphsource object that is derived the ObservableGraphSourceBase<NodeViewModelBase, MyLink>. I want to control the creation of the link on certain conditions. If the conditions are met, I call the base.AddLink() method, otherwise I want to prevent the creation of link. How can I do this?
I tried not calling base.AddLink() but the link still appears on the diagram while it is not contained in the graphsource. How can I prevent or delete this link to be shown on the diagram?
Thanks,
Semih
4 Answers, 1 is accepted
0
Sammy
Top achievements
Rank 1
answered on 11 Aug 2014, 12:42 PM
Any solution?
0
Hi Sammy,
I am not sure that I completely understand your requirement. Can you elaborate a little more on your scenario by telling me how you add the connection and where the link appears? Also if you could provide me with a sample project it would be helpful for better understanding your case and assist you further.
However, you can use the ConnectionManipulationCompleted event of the diagram to prevent creation (and any other manipulation) of a connection. Here is an example in code:
I hope this helps.
Regards,
Martin
Telerik
I am not sure that I completely understand your requirement. Can you elaborate a little more on your scenario by telling me how you add the connection and where the link appears? Also if you could provide me with a sample project it would be helpful for better understanding your case and assist you further.
However, you can use the ConnectionManipulationCompleted event of the diagram to prevent creation (and any other manipulation) of a connection. Here is an example in code:
private
void
diagram_ConnectionManipulationCompleted(
object
sender, ManipulationRoutedEventArgs e)
{
if
( your condition
is
met )
{
// cancel the connection's manipulation
e.Handled =
true
;
}
}
I hope this helps.
Regards,
Martin
Telerik
Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.
0
Sammy
Top achievements
Rank 1
answered on 13 Aug 2014, 07:05 AM
Hi Martin,
Firstly, I use MVVM pattern for the project. What I want to do is, when the user grabs a connection from a connector and attaches it to a connector of another shape, I want to cancel the connection creation if the user tries to connect the connection to a connector of a shape that I don't want. To provide this I tried overriding the AddLink method. In the method I can detect the condition but, how can I remove or delete the connection that is created with the last move? I tried to change the visibility but since it is not added by calling the base.Addlink() method I cannot manipulate it at all. But the arrow remains on the diagram somehow.(non selectable, just visually there).
How can I remove/hide the link shape that I don't want to be added.
Firstly, I use MVVM pattern for the project. What I want to do is, when the user grabs a connection from a connector and attaches it to a connector of another shape, I want to cancel the connection creation if the user tries to connect the connection to a connector of a shape that I don't want. To provide this I tried overriding the AddLink method. In the method I can detect the condition but, how can I remove or delete the connection that is created with the last move? I tried to change the visibility but since it is not added by calling the base.Addlink() method I cannot manipulate it at all. But the arrow remains on the diagram somehow.(non selectable, just visually there).
How can I remove/hide the link shape that I don't want to be added.
public
override
void
AddLink(TransitionShapeViewModel link)
{
if
(link.Source.IsArtificial)
{
link.Visibility = Visibility.Collapsed;
link.Refresh();
return
;
}
if
(!link.IsConstraint)
{
if
(link.SourceConnectorPosition ==
"MiddleCenter"
|| link.TargetConnectorPosition ==
"MiddleCenter"
)
{
link.Visibility = Visibility.Collapsed;
link.Refresh();
return
;
}
link.Transition.TargetState = link.Target.State;
link.Transition.SourceState = link.Source.State;
if
(!link.Target.ParentComponent.Component.Transitions.Contains(link.Transition))
{
link.Target.ParentComponent.Component.Transitions.Add(link.Transition);
}
if
(!link.Target.ParentComponent.TransitionShapeViewModels.Contains(link))
{
link.Target.ParentComponent.TransitionShapeViewModels.Add(link);
}
}
base
.AddLink(link);
}
0
Hello Sammy,
The AddLink method will be called only if you add new connection in the diagram (therefore in the GraphSource). However, if you add connection and you doesn't call the base.AddLink() method, this new connection will be included in the diagram, but won't be synchronized with the view model which will lead to incorrect behavior of the link.
In order to achieve your requirement you can use the ConnectionManipulationCompleted event that I mentioned in my last reply and implement your logic there.
As for removing a connection (link) from the diagram you can use the GraphSource's Links collection. The last connection in the collection is the last connection added in the diagram.
Regards,
Martin
Telerik
The AddLink method will be called only if you add new connection in the diagram (therefore in the GraphSource). However, if you add connection and you doesn't call the base.AddLink() method, this new connection will be included in the diagram, but won't be synchronized with the view model which will lead to incorrect behavior of the link.
In order to achieve your requirement you can use the ConnectionManipulationCompleted event that I mentioned in my last reply and implement your logic there.
private
void
diagram_ConnectionManipulationCompleted(
object
sender, ManipulationRoutedEventArgs e)
{
if
(e.ManipulationStatus == ManipulationStatus.Attaching)
{
var targetShape = e.Shape
as
RadDiagramShapeBase;
var connection = e.Connection
as
RadDiagramConnection;
var node = targetShape.DataContext
as
Node;
var link = connection.DataContext
as
TransitionShapeViewModel ;
if
( your conditions are met)
// the connection won't be added/moved
{
e.Handled =
true
;
}
}
}
As for removing a connection (link) from the diagram you can use the GraphSource's Links collection. The last connection in the collection is the last connection added in the diagram.
Regards,
Martin
Telerik
Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.