第二节:Nodify 添加节点到编辑器中

引言

上节说到Nodify有三层结构,编辑器Editor,节点Node和连接组件Connection,下面就让我们来进行第一步尝试,在编辑器中添加一个节点。

在窗口中添加nodify命名空间,并添加控件。

xmlns:nodify="https://miroiu.github.io/nodify"

1、设计节点Node

一个节点工具主要包含节点的名称、功能、输出输出口等,输出输出口称连接端子(Connector)

1.1、基本单元:连接端子Connector

  public class ConnectorViewModel
  {
      public string Title { get; set; }
     
  }

1.2、节点Node

创建一个节点,有一个输入端子排、一个输出端子排

public class NodeViewModel
{
    public string Title { get; set; }

    public ObservableCollection<ConnectorViewModel> Input { get; set; } = new ObservableCollection<ConnectorViewModel>();
    public ObservableCollection<ConnectorViewModel> Output { get; set; } = new ObservableCollection<ConnectorViewModel>();
}

2、编辑器Editor

编辑器:作为最外层的主要交互对象,保存所有节点

public class EditorViewModel
{
    //节点集合
    public ObservableCollection<NodeViewModel> Nodes { get; } = new ObservableCollection<NodeViewModel>();

    public EditorViewModel()
    {
        //自定义节点
        var welcome = new NodeViewModel
        {
            Title = "Welcome",
            Input = new ObservableCollection<ConnectorViewModel>
            {
                new ConnectorViewModel
                {
                    Title = "In"
                }
            },
            Output = new ObservableCollection<ConnectorViewModel>
            {
                new ConnectorViewModel
                {
                    Title = "Out"
                }
            }
        };
       
        //添加自定义节点到节点集合
        Nodes.Add(welcome);

    }
}

3、绑定属性

​
<Grid>
    <nodify:NodifyEditor
        Name="Editor"
        ItemsSource="{Binding Nodes}">
        <nodify:NodifyEditor.DataContext>
            <vm:EditorViewModel />
        </nodify:NodifyEditor.DataContext>
        <nodify:NodifyEditor.ItemTemplate>
            <DataTemplate DataType="{x:Type mod:NodeViewModel}">
                <nodify:Node
                    Header="{Binding Title}"
                    Input="{Binding Input}"
                    Output="{Binding Output}">
                    <nodify:Node.InputConnectorTemplate>
                        <DataTemplate DataType="{x:Type mod:ConnectorViewModel}">
                            <nodify:NodeInput
                                Header="{Binding Title}"
                                />
                        </DataTemplate>
                    </nodify:Node.InputConnectorTemplate>
                    <nodify:Node.OutputConnectorTemplate>
                        <DataTemplate DataType="{x:Type mod:ConnectorViewModel}">
                            <nodify:NodeInput
                                Header="{Binding Title}"
                               />
                        </DataTemplate>
                    </nodify:Node.OutputConnectorTemplate>
                </nodify:Node>
            </DataTemplate>
        </nodify:NodifyEditor.ItemTemplate>
    </nodify:NodifyEditor>
</Grid>

​

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James.TCG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值