2017-02-01 16 views
0

Я оцениваю SynfFusion SfDiagram и не могу найти способ обновить узлы и коннекторы от моего C# в UWP? Я тестирую их образец, указанный в документации Getting Started, и модифицировал EmpId как строку. В результате новый узел добавляется, но исходные узлы все еще отображаются. Я ожидал бы увидеть только два узла, которые я добавляю в код C#.Как вы программно обновляете узлы и коннекторы SyncFusion UWP Diagram?

Я нахожу их документацию немного запутанной. Я попытался следующие:

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

Отформатируйте свой код перед отправкой в ​​следующий раз – Rob

+0

Вы можете добавить точку останова в 'EmployeesCollection.Clear();', чтобы проверить, есть ли что-либо в коллекции, прежде чем вы ее очистите. Если его пустая (как я подозреваю), попробуйте найти другой способ доступа и очистки элементов или Itemssource из «Employees» или «EmployeesCollection». –

+0

Извините за форматирование кода. Я не писал здесь часто и играл с ним немного. CTRL + K не очистил его. Я поработаю над этим. Благодарю. – okiedev

ответ

0

Пожалуйста, обновите настройки DataSource следующим образом во время выполнения,

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; 

Поддержка RefreshFrequency недвижимости для LayoutManager. Свойство 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 для разметки. Он используется для упорядочивания положения узла. Приведенный пример кода представляет это.

Пример кода:

//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 Р.

+0

Спасибо за сообщение. Первоначально я пытался очистить названную коллекцию (Employees), которую я создал в образце. Вместо того, чтобы сбрасывать DataSourceSettings, как я был, я теперь воссоздаю новую коллекцию сотрудников и назначая ее диаграмме DataSourceSettings, как у вас в вашем коде. Благодарю. – okiedev

0

Спасибо за предложение, Keyur Patel. Я обнаружил, что перед обновлением (странным) мне необходимо отключить DataSourceSettings. Я добавил x: Name в DataSourceSettings из своего образца (назвав его DiagramDataSourceSettings). Вот что я добавил, чтобы получить его, чтобы очистить оригинальные узлы и обновления с моими новыми узлами:

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

Сейчас вопрос в том, что при обновлении он помещает новые узлы в верхнем правом углу (немного вне поля зрения) ,

+0

Keyur - Я также установил точку останова для проверки коллекции при вызове Clear(). Он все еще был заполнен моими начальными узлами. После очистки он действительно очистил узлы, и я мог повторно заселить. Но без обнуления DataSourceSettings старые узлы все еще отображались на диаграмме. – okiedev

1

Я подсчитываю SF Diagram, а также.

Я стараюсь делать все с точки зрения ViewModel. У меня есть DataSourceSetting диаграммы, привязанный к свойству VM типа DataSourceSettings. Из ViewModel я изменяю свойство DataSourceSettings Datasource в новую коллекцию.

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

     DS.DataSource = Activities; 

     OnDiagramUpdated(EventArgs.Empty); 

Теперь идет уродливая часть с точки зрения ViewModel. Моя ViewModel поднимает «OnDiagramUpdated» событие, и я обрабатывать тир те codebhind так:

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 линия вызывает перерисовку. Может быть, это поможет.

+0

Спасибо, Ибрагим. Теперь я использую подход, чтобы установить RefreshFrequency, чтобы получить автоматическое форматирование узлов. Он очищает вещи, но теперь я не могу перетащить узлы. Похоже, они заперты, когда их помещают. Знаете ли вы, нужно ли мне подавлять тип события «OnChanged», чтобы разрешить компоновку узла пользователя? – okiedev

+0

Я мог перемещать вещи, хотя я еще не пытался перетащить [пока]. Мои требования не будут, в любом случае, требовать перетаскивания. –

 Смежные вопросы

  • Нет связанных вопросов^_^