如何以编程方式更新SyncFusion UWP Diagram的节点和连接器?

时间:2017-02-01 05:13:16

标签: c# syncfusion

我正在评估SyncFusion SfDiagram并且无法在UWP中找到更新C#中的节点和连接器的方法吗?我正在对Getting Started文档中给出的样本进行测试,并将EmpId修改为字符串。结果是添加了新节点,但仍显示原始节点。我希望只看到我在C#代码中添加的两个节点。

我发现他们的文档有点令人困惑。我尝试过以下方法:

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();

3 个答案:

答案 0 :(得分:1)

请在运行时更新数据源设置,

 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; 

对LayoutManager的RefreshFrequency属性支持。 RefreshFrequency属性用于在更改节点或连接器集合时更新布局。提供的代码示例来表示这一点。请参考下面的代码示例。

代码示例:

sfdiagram.LayoutManager.RefreshFrequency = RefreshFrequency.ArrangeParsing;

Here, sfdiagram is instance of SfDiagram 

有关详细信息,请参阅以下知识库链接。

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

建议2: UpdateLayout方法支持Layout。它用于排列节点位置。提供代码示例来表示它。

代码示例:

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

Here, sfdiagram is instance of SfDiagram. 

有关UpdateLayout的更多信息,请参阅文档链接,如下所示。

文档链接:https://help.syncfusion.com/wpf/sfdiagram/automatic-layouts#updating-the-layout

问候,

Keerthivasan R。

答案 1 :(得分:1)

我也正在评估SF图。

我正试图从ViewModel的角度来做所有事情。我将图表的DataSourceSetting绑定到DataSourceSettings类型的VM属性。 从ViewModel我将DataSourceSettings数据源属性更改为新集合。

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

        DS.DataSource = Activities;

        OnDiagramUpdated(EventArgs.Empty);

现在来自ViewModel透视图的丑陋部分。我的Viewmodel提出了一个&#34; OnDiagramUpdated&#34;事件,我像这样处理它的代码:

 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;
        };

    }

}

RefreshFrequency行导致重绘。也许这会有所帮助。

答案 2 :(得分:0)

感谢您的建议,Keyur Patel。我发现在更新之前我必须将DataSourceSettings归零(奇怪)。我从他们的示例中将x:Name添加到DataSourceSettings(命名为DiagramDataSourceSettings)。这是我添加它以清除原始节点并使用我的新节点更新的内容:

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

现在的问题是,当它更新时,它会将新节点放在右上角(稍微偏离视图)。