Referring to http://ko.infragistics.com/samples/wpf/diagram/binding-nodes-with-objects
Can you please suggest recommended way of aligning new nodes if a child node is created on fly. I have set TreeDiagramLayout's NodeFlowDirection to "Below" but when a new object is added in viewmodel at run time it goes to top left corner of diagram.
Ideally starting from parent, I would like nodes to be center aligned and newly created to be below parent node.
Hi Michael,
I have looked the link on how to configure custom layout which look great, however I can not locate ItemCollectionChanged event in diagram or diagram's items collection to call RefreshLayout function.
http://help.infragistics.com/doc/WPF/2016.1/CLR4.0/?page=InfragisticsWPF4.Controls.Charts.XamDiagram.v16.1~Infragistics.Controls.Charts.XamDiagram_members.html
I have attached an example with this post can you please suggest the right event? I would like to retain TreeDiagramLayout implemented by infragistics and no custom layout is required.
Also, I would like user to be able to move diagram nodes horizontally and restrict any vertical movement in diagram.
Hello Abs,
I've updated my post above with the correct link.
http://ko.infragistics.com/help/wpf/xamdiagram-configuring-the-layout
Let me know if you have any questions.
Thank you for these ideas. This link is broken for me!
http://help.infragistics.com/Help/Doc/WPF/2016.2/CLR4.0/html/xamDiagram_Configuring_the_Layout.html
The diagram layout is applied only initially to the diagram. If the items are added/removed later (eg. view model collection), the layout is not automatically applied. In order to rearrange the nodes at a later stage, call the RefreshLayout method directly on the XamDiagram.
eg.
mainWindow.Diagram.RefreshLayout();
For more details please visit:http://ko.infragistics.com/help/wpf/xamdiagram-configuring-the-layout
If you require a custom position you can use the diagram's items collection changed event to do so:
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { FamilyTreeViewModel vm = this.Diagram.DataContext as FamilyTreeViewModel;
if (e.NewStartingIndex >= vm.FamilyTree.Count) { if (e.NewItems[0] is DiagramNode) {
DiagramNode newlyAdded = e.NewItems[0] as DiagramNode; newlyAdded.Position = new Point(50, 50); } } }
Let me know if you have any questions regarding this matter.