This is a migrated thread and some comments may be shown as answers.

Why adding new node breaks the layout?

3 Answers 63 Views
Diagram
This is a migrated thread and some comments may be shown as answers.
Konstantin
Top achievements
Rank 1
Konstantin asked on 13 Dec 2018, 12:23 PM

Hello.
I am testing a WPF Org Chart Diagram and I need to dynamic create child nodes when user clicks the Node (lazy loading).
But I have a problem. When I create new node and link and call diagram.Layout(...), routing is corrupted.

How to fix it?

3 Answers, 1 is accepted

Sort by
0
Konstantin
Top achievements
Rank 1
answered on 14 Dec 2018, 07:53 AM

To better understand my problem I show some code:

public class MainWindowViewModel : ViewModelBase
    {
        public event EventHandler<EventArgs> OnNodeAdded;
 
        public ICommand AddNodeCommand { get; private set; }
        public Node RootNode { get; private set; }
 
        public MainWindowViewModel()
        {
            AddNodeCommand = new RelayCommand(AddNodeExecute);
 
            this.GraphSource = new GraphSource();
            _populateWithData();
        }
 
        public void AddNodeExecute(object parameter)
        {
            Node newVertex = new Node() { Text = "Mary Bird" };
            RootNode.Children.Add(newVertex);
            this.GraphSource.AddNode(newVertex);
            this.GraphSource.AddLink(new Link(RootNode, newVertex));
 
            //Notify View about new node is added
            OnNodeAdded?.Invoke(this, EventArgs.Empty);
        }
 
        private void _populateWithData()
        {
            RootNode = new Node() { Text = "Andrew Fuller" };
 
            Node level1 = new Node() { Text = "Jeremy Boather" };
            level1.Children.Add(new Node() { Text = "Steven Buchanan" });
 
            RootNode.Children.Add(level1);
            RootNode.Children.Add(new Node() { Text = "Anne Dodsworth" });
            RootNode.Children.Add(new Node() { Text = "Robert King" });
 
            this.GraphSource.PopulateGraphSource(RootNode);
        }
 
        private GraphSource graphSource;
        public GraphSource GraphSource
        {
            get
            {
                return this.graphSource;
            }
            set
            {
                if (this.graphSource != value)
                {
                    this.graphSource = value;
                    this.OnPropertyChanged("GraphSource");
                }
            }
        }
    }


After new node was added, then ViewModel rise the Event "OnNodeAdded" and calling method of the View

private void MainWindowViewModel_OnNodeAdded(object sender, EventArgs e)
{
   LayoutOrgChart(true);
}
0
Accepted
Martin Ivanov
Telerik team
answered on 18 Dec 2018, 12:14 PM
Hello Konstantin,

I've plugged your code into the OrgChart SDK example, but I wasn't able to reproduce the issue. Can you please check the attached project and let me know if I am missing something? Note that in order to add a new node you will need to press the right mouse button.

Regards,
Martin Ivanov
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
Konstantin
Top achievements
Rank 1
answered on 18 Dec 2018, 12:28 PM

Thank you, Matrin!

I have already solved my problem.
I began to use diagram.LayoutAsync() instead off Layout()

Tags
Diagram
Asked by
Konstantin
Top achievements
Rank 1
Answers by
Konstantin
Top achievements
Rank 1
Martin Ivanov
Telerik team
Share this question
or