当前位置: 首页 > news >正文

第二节: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:NodifyEditorName="Editor"ItemsSource="{Binding Nodes}"><nodify:NodifyEditor.DataContext><vm:EditorViewModel /></nodify:NodifyEditor.DataContext><nodify:NodifyEditor.ItemTemplate><DataTemplate DataType="{x:Type mod:NodeViewModel}"><nodify:NodeHeader="{Binding Title}"Input="{Binding Input}"Output="{Binding Output}"><nodify:Node.InputConnectorTemplate><DataTemplate DataType="{x:Type mod:ConnectorViewModel}"><nodify:NodeInputHeader="{Binding Title}"/></DataTemplate></nodify:Node.InputConnectorTemplate><nodify:Node.OutputConnectorTemplate><DataTemplate DataType="{x:Type mod:ConnectorViewModel}"><nodify:NodeInputHeader="{Binding Title}"/></DataTemplate></nodify:Node.OutputConnectorTemplate></nodify:Node></DataTemplate></nodify:NodifyEditor.ItemTemplate></nodify:NodifyEditor>
</Grid>​

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【GH】【EXCEL】P3: Set Conditional Formatting To Excel Data By Gh
  • Vue.js学习笔记(七)使用sortablejs或el-table-draggable拖拽ElementUI的el-table表格组件
  • “太猴看了”车衣引发热议:深蓝要和“黑悟空”跨界互动?
  • 【解压即玩】最终幻想7 重制版中文+预购特典+全DLC,难忘的一作
  • Facebook的区块链战略:如何在社交媒体中实现去中心化
  • Tomcat类加载机制详解
  • java多线程(七)AQS(AbstractQueuedSynchronizer)技术解析:以赛跑起跑场景为例
  • 【Python机器学习】NLP的部分实际应用
  • 企业数字化转型管控平台探索 ---基于流程的企业经络管理框架DEM
  • QEMU模拟ARM嵌入式LINUX系统
  • Python | Leetcode Python题解之第371题两整数之和
  • import tensorflow报错TypeError: unhashable type: ‘list‘
  • 重生奇迹MU 冲锋在前近战职业
  • ubuntu安装虚拟环境(tensorflow、torch)
  • JPA外键映射注解导致的性能问题
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • java中具有继承关系的类及其对象初始化顺序
  • python3 使用 asyncio 代替线程
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 高度不固定时垂直居中
  • 聚类分析——Kmeans
  • 前言-如何学习区块链
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 小程序测试方案初探
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # C++之functional库用法整理
  • #git 撤消对文件的更改
  • #includecmath
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (五)c52学习之旅-静态数码管
  • (转)EOS中账户、钱包和密钥的关系
  • (转)ORM
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core 管理用户机密
  • .NET Core跨平台微服务学习资源
  • .NET 反射的使用
  • .net6+aspose.words导出word并转pdf
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net程序集学习心得
  • .NET开发人员必知的八个网站
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .net中生成excel后调整宽度