Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基础设施:如何动态添加数据并使用ForceDirectedGraphDiagramLayout?_C#_Wpf_Infragistics - Fatal编程技术网

C# 基础设施:如何动态添加数据并使用ForceDirectedGraphDiagramLayout?

C# 基础设施:如何动态添加数据并使用ForceDirectedGraphDiagramLayout?,c#,wpf,infragistics,C#,Wpf,Infragistics,我有一个关系图,它绑定到节点的ObservableCollection和连接的ObservableCollection。当节点和连接硬编码到这些列表中时,图表会很好地显示它们。但是,当稍后在程序中将节点和连接值添加到列表中时,所有节点都会在窗口的中心位置彼此重叠。在这个场景中,ForceDirectedGraphDiagramLayout似乎没有按我想象的方式工作。我的问题是,如何将数据动态添加到图表中,并使图表处于ForceDirectedGraphDiagramLayout 这是我的表格:

我有一个关系图,它绑定到节点的
ObservableCollection
和连接的
ObservableCollection
。当节点和连接硬编码到这些列表中时,图表会很好地显示它们。但是,当稍后在程序中将节点和连接值添加到列表中时,所有节点都会在窗口的中心位置彼此重叠。在这个场景中,
ForceDirectedGraphDiagramLayout
似乎没有按我想象的方式工作。我的问题是,如何将数据动态添加到图表中,并使图表处于
ForceDirectedGraphDiagramLayout

这是我的表格:

<Grid Background="White">
    <ig:XamDiagram x:Name="Diagram"
                   OptionsPaneVisibility="Visible" 
                   NavigationPaneVisibility="Visible" 
                   DefaultDragInteraction="Pan">
        <ig:XamDiagram.NodeDefinitions>
            <ig:NodeDefinition TargetType="{x:Type models:EntityType}" 
                               KeyMemberPath="Name"
                               ConnectionPointsMemberPath="EntityPoints" >
                <ig:NodeDefinition.NodeStyle>
                    <Style TargetType="ig:DiagramNode" >
                        <Setter Property="DisplayTemplate" Value="{StaticResource NodeTemplate}"/>
                        <Setter Property="ShapeType" Value="None" />
                        <Setter Property="Fill" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.FillColor, Converter={StaticResource con}, Mode=TwoWay}" />
                        <Setter Property="Width" Value="140" />
                    </Style>
                </ig:NodeDefinition.NodeStyle>
            </ig:NodeDefinition>
        </ig:XamDiagram.NodeDefinitions>
        <ig:XamDiagram.ConnectionDefinitions>
            <ig:ConnectionSourceDefinition TargetType="{x:Type models:Association}" 
                                           StartNodeKeyMemberPath="End1Name" 
                                           EndNodeKeyMemberPath="End2Name"
                                           StartNodeConnectionPointNameMemberPath="PointFromName"
                                           EndNodeConnectionPointNameMemberPath="PointToName">
                <ig:ConnectionSourceDefinition.ConnectionStyle>
                    <Style TargetType="ig:DiagramConnection">
                        <Setter Property="StartCapType" Value="None"/>
                        <Setter Property="EndCapType" Value="FilledArrow"/>
                        <Setter Property="DisplayTemplate" >
                            <Setter.Value>
                                <DataTemplate/>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ig:ConnectionSourceDefinition.ConnectionStyle>
            </ig:ConnectionSourceDefinition>
        </ig:XamDiagram.ConnectionDefinitions>
        <ig:XamDiagram.Layout>
            <ig:ForceDirectedGraphDiagramLayout Buffer="200" />
        </ig:XamDiagram.Layout>
    </ig:XamDiagram>
</Grid>

代码隐藏:

    private CurrentData currentData = CurrentData.GetInstance();

    private ObservableCollection<EntityType> Nodes { get; set; }
    private ObservableCollection<Association> Associations { get; set; }

    public MyDiagram()
    {
        InitializeComponent();

        Nodes = currentData.GetNodes();
        Associations = currentData.GetAssociations();

        Diagram.ItemsSource = Nodes;
        Diagram.ConnectionsSource = Associations;
    }

    void OnLoad(object sender, RoutedEventArgs e)
   {
       Diagram.ScaleToFit();
   }
private CurrentData CurrentData=CurrentData.GetInstance();
私有ObservableCollection节点{get;set;}
私有ObservableCollection关联{get;set;}
公共关系图()
{
初始化组件();
Nodes=currentData.GetNodes();
Associations=currentData.GetAssociations();
Diagram.ItemsSource=节点;
Diagram.connectionsource=关联;
}
void OnLoad(对象发送器,RoutedEventArgs e)
{
ScaleToFit()图;
}

GetNodes()
GetAssociations()
返回各自的
可观察集合
。当这些集合中的对象在程序运行之前硬编码时,图表定位就可以完美地工作。当程序已在运行时将对象添加到列表中时,所有节点都放置在彼此的顶部

我通过将数据绑定从代码隐藏构造函数移动到
OnLoad()
函数,解决了这个问题

下面的代码如下所示:

private CurrentData currentData = CurrentData.GetInstance();

private ObservableCollection<EntityType> Nodes { get; set; }
private ObservableCollection<Association> Associations { get; set; }

public MyDiagram()
{
    InitializeComponent();
}

void OnLoad(object sender, RoutedEventArgs e)
{
    Nodes = currentData.GetNodes();
    Associations = currentData.GetAssociations();

    Diagram.ItemsSource = Nodes;
    Diagram.ConnectionsSource = Associations;
    Diagram.ScaleToFit();
}
private CurrentData CurrentData=CurrentData.GetInstance();
私有ObservableCollection节点{get;set;}
私有ObservableCollection关联{get;set;}
公共关系图()
{
初始化组件();
}
void OnLoad(对象发送器,RoutedEventArgs e)
{
Nodes=currentData.GetNodes();
Associations=currentData.GetAssociations();
Diagram.ItemsSource=节点;
Diagram.connectionsource=关联;
ScaleToFit()图;
}