2017-02-01 1 views
0

Ich werte das SyncFusion SfDiagram aus und habe Probleme, einen Weg zu finden, um die Knoten und Konnektoren von meinem C# in UWP zu aktualisieren? Ich teste mit dem in der Dokumentation Getting Started angegebenen Beispiel und ändere das EmpId als String. Das Ergebnis ist, dass der neue Knoten hinzugefügt wird, aber die ursprünglichen Knoten weiterhin angezeigt werden. Ich würde erwarten, nur die zwei Knoten zu sehen, die ich im C# -Code hinzufüge.Wie aktualisieren Sie die Knoten und Connectors eines SyncFusion UWP-Diagramms programmgesteuert?

Ich finde ihre Dokumentation ein wenig verwirrend. Ich habe versucht, die folgenden:

XAML

<local:Employees x:Name="EmployeesCollection" x:Key="Employees"> 
    <local:Employee Name="Elizabeth" EmpId="1" ParentId="" Designation="CEO"/> 
    <local:Employee Name="Christina" EmpId="2" ParentId="1" Designation="Manager"/> 
</local:Employees> 

C#

EmployeesCollection.Clear(); 
employee e = new Employee(); 
e.Name = t.Designation = e.EmpId = "10"; 
e.ParentId = ""; 
EmployeesCollection.Add(e); 

employee e = new Employee(); 
e.Name = t.Designation = e.EmpId = "11"; 
e.ParentId = "10"; 
EmployeesCollection.Add(e); 

diagram.UpdateLayout(); 
+0

Bitte formatieren Sie Ihren Code, bevor Sie das nächste Mal schreiben – Rob

+0

Sie könnten einen Breakpoint bei 'EmployeesCollection.Clear();' hinzufügen, um zu prüfen, ob sich etwas in der Sammlung befindet, bevor Sie es löschen. Wenn es leer ist (wie ich vermute), versuchen Sie, einen anderen Weg zu finden, um auf die Items oder die Itemsource von "Employees" oder "EmployeesCollection" zuzugreifen und diese zu löschen. –

+0

Entschuldigung für die Codeformatierung. Ich habe hier nicht oft gepostet und damit ein bisschen gespielt. STRG + K hat es nicht aufgeräumt. Ich werde daran arbeiten. Vielen Dank. – okiedev

Antwort

0

Bitte aktualisieren Sie die Datenquelle Einstellungen zur Laufzeit folgt,

Employees employees = new Employees(); 
    DataSourceSettings settings = new DataSourceSettings(); 
    settings.ParentId = "ParentId"; 
    settings.Id = "EmpId"; 


    employees.Add(new Employee() { EmpId = 1, ParentId = "", Name = "Charly", Designation = "Manager" }); 
    employees.Add(new Employee() { EmpId = 2, ParentId = "1", Name = "Ronald", Designation = "TeamLead" }); 

    settings.DataSource = employees; 
    sfdiagram.DataSourceSettings = settings; 

Die Refresh Eigenschaft Unterstützung für Layoutmanager. Die RefreshFrequency-Eigenschaft wird verwendet, um das Layout zu aktualisieren, wenn die Auflistung Knoten oder Connectors geändert wird. Das mitgelieferte Codebeispiel um dies darzustellen. Bitte beachten Sie das Codebeispiel wie folgt.

Code-Beispiel:

sfdiagram.LayoutManager.RefreshFrequency = RefreshFrequency.ArrangeParsing; 

Here, sfdiagram is instance of SfDiagram 

Weitere Informationen finden Sie in der Wissensbasis Link wie unten.

https://www.syncfusion.com/kb/6258/how-to-update-layout-automatically-when-collection-is-changed

Vorschlag 2: Die UpdateLayout Verfahren Unterstützung für Layout. Es wird verwendet, um die Knotenposition anzuordnen. Das Codebeispiel wurde bereitgestellt, um dies darzustellen.

Codebeispiel:

//Diagram Loaded Event 
sfdiagram.Loaded += MainWindow_Loaded; 
void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
sfdiagram.LayoutManager.Layout.UpdateLayout(); 
} 

Here, sfdiagram is instance of SfDiagram. 

Weitere Informationen über UpdateLayout, lesen Sie bitte wie unten in der Dokumentation Link.

Dokumentation Link: https://help.syncfusion.com/wpf/sfdiagram/automatic-layouts#updating-the-layout

Grüße,

Keerthivasan R.

+0

Vielen Dank für Ihren Beitrag. Ursprünglich habe ich versucht, die genannte Sammlung (Mitarbeiter) zu löschen, die ich im Beispiel erstellt hatte. Anstatt die DataSourceSettings wie bisher auszugeben, erstelle ich nun eine neue Sammlung von Mitarbeitern und ordne sie dem Diagramm DataSourceSettings so zu, wie Sie es in Ihrem Code haben. Vielen Dank. – okiedev

0

Danke für die Anregung, Keyur Patel. Ich habe festgestellt, dass ich die DataSourceSettings vor der Aktualisierung aufheben muss (seltsam). Ich habe x: Name zu den DataSourceSettings aus ihrem Beispiel hinzugefügt (nenne es DiagramDataSourceSettings). Hier ist, was ich hinzugefügt, um ihm den ursprünglichen Knoten zu löschen und aktualisiert mit meinem neuen Knoten:

diagram.DataSourceSettings = null; 
diagram.DataSourceSettings = DiagramDataSourceSettings; 
diagram.UpdateLayout(); 

Das Problem ist jetzt, dass, wenn es aktualisiert er die neuen Knoten in der rechten oberen Ecke platziert (etwas aus dem Blickfeld) .

+0

Keyur - Ich habe auch einen Haltepunkt gesetzt, um die Sammlung beim Aufruf von Clear() zu überprüfen. Es war immer noch mit meinen ersten Knoten gefüllt. Nach dem Löschen löschte es tatsächlich die Knoten und ich konnte wieder besiedeln. Ohne die DataSourceSettings jedoch auszulassen, wurden die alten Knoten weiterhin im Diagramm angezeigt. – okiedev

1

Ich bin der SF-Diagramm als auch die Bewertung.

Ich versuche alles aus einer ViewModel Perspektive zu machen. Ich habe die DataSourceSetting-Eigenschaft des Diagramms an eine VM-Eigenschaft vom Typ DataSourceSettings gebunden. Vom ViewModel aus ändere ich die DataSourceSettings-Datenquellen-Eigenschaft in die neue Sammlung.

Activities = new ObservableCollection<Activity>(App.AppState.BPAnalysis.IDEFOActivities[0].Activities.ToList()); 

     DS.DataSource = Activities; 

     OnDiagramUpdated(EventArgs.Empty); 

Jetzt kommt der hässliche Teil aus einer ViewModel-Perspektive. Mein Ansichtsmodell wirft eine „OnDiagramUpdated“ Ereignis und ich Griff itin te codebhind wie folgt aus:

public sealed partial class Diagramer : UserControl 
{ 

    ViewModels.DiagramVM vm = null; 
    public Diagramer() 
    { 
     this.InitializeComponent(); 
     vm = new ViewModels.DiagramVM(); 
     this.DataContext = vm; 
     vm.DiagramUpdated += (s, e) => 
     {     
      DG1.LayoutManager.RefreshFrequency = RefreshFrequency.ArrangeParsing; 
     }; 

    } 

} 

Die Refresh Linie die Neuzeichnung verursacht. Vielleicht wird das helfen.

+0

Danke, Ibrahim. Ich verwende jetzt den Ansatz, um die RefreshFrequency so einzustellen, dass die Knoten automatisch formatiert werden. Es räumt alles auf, aber jetzt kann ich die Knoten nicht ziehen und ablegen. Scheint so, als wären sie gesperrt, wenn sie platziert werden. Weißt du, ob ich einen Ereignistyp "OnChanged" unterdrücken muss, um die Knotenanordnung eines Benutzers zu erlauben? – okiedev

+0

Ich war in der Lage, Dinge zu bewegen, obwohl ich noch nicht versucht habe, Drag & Drop zu machen [noch nicht. Meine Anforderungen werden derzeit noch kein Drag and Drop erfordern. –

Verwandte Themen