我正在评估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();
答案 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();
现在的问题是,当它更新时,它会将新节点放在右上角(稍微偏离视图)。