Nodify学习 一:介绍与使用 - 可乐_加冰 - 博客园 (cnblogs.com)

Nodify学习 二:添加节点 - 可乐_加冰 - 博客园 (cnblogs.com)

添加节点(nodes)

通过上一篇我们已经创建好了编辑器实例现在我们为编辑器添加一个节点

添加model和viewmodel并将它们绑定到视图

public class NodeViewModel
{
public string Title { get; set; }
}
public class EditorViewModel
{
public ObservableCollection<NodeViewModel> Nodes { get; } = new ObservableCollection<NodeViewModel>(); public EditorViewModel()
{
Nodes.Add(new NodeViewModel { Title = "Welcome" });
}
}

添加视图模型

视图模型可以是任何形状,但节点的视图由 ItemTemplate 生成。(将 DataTemplate 放在 NodifyEditor.Resources 中也能实现相同的效果)

  <window
....
xmlns:vm="clr-namespace:NodifySamples2.ViewModels"
.....
>
<nodify:NodifyEditor
           x: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}" />
                                   </DataTemplate>
     </nodify:NodifyEditor.ItemTemplate>
</nodify:NodifyEditor>

效果图

添加连接节点

连接节点用于管理节点之间的连接,和绘制对应的连接线

首先,我们需要一个连接器的表示以及节点上一些集合来存储我们的连接器。

public class ConnectorViewModel
{
public string Title { get; set; }
}
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>();
}
public class EditorViewModel
{
public ObservableCollection<NodeViewModel> Nodes { get; } = new ObservableCollection<NodeViewModel>(); public EditorViewModel()
{
Nodes.Add(new NodeViewModel
{
Title = "Welcome",
Input = new ObservableCollection<ConnectorViewModel>
{
new ConnectorViewModel
{
Title = "输入"
}
},
Output = new ObservableCollection<ConnectorViewModel>
{
new ConnectorViewModel
{
Title = "输出"
}
}
});
}
}

然后将它们绑定到视图。(我们使用了内置的 NodeInput 和 NodeOutput 作为视图,但也有其他连接器。或者根据需要创建自己的连接器。)

 <nodify:NodifyEditor
x:Name="Editor"
Background="{StaticResource GridDrawingBrush}"
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:NodeOutput Header="{Binding Title}" />
</DataTemplate>
</nodify:Node.OutputConnectorTemplate>
</nodify:Node>
</DataTemplate>
</nodify:NodifyEditor.ItemTemplate>
</nodify:NodifyEditor>

效果

下载地址

Github:zt199510/NodifySamples (github.com)

Nodify学习 二:添加节点的更多相关文章

  1. IO学习二(节点流)

    1.流的分类 按照数据流向的不同:输入流和输出流 按照处理数据的单位不同:字节流((非文本文件)视频.音频.图像).字符流(文本文件) 按照角色的不同:节点流和处理流 2.IO体系 抽象基类 节点流 ...

  2. Oracle RAC集群添加节点

    一,节点环境 所有节点分发/etc/hosts,这里我添加两个节点,一个是上次删除的节点,另一个是什么都没有的节点,尝试添加 服务器介绍什么的都在这hosts文件了,大家自己琢磨下 [grid@nod ...

  3. JavaScript案例二:在末尾添加节点

    简单实现通过JavaScript来增加HTML节点 <!DOCTYPE html> <html> <head> <title>JavaScript在末尾 ...

  4. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  5. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  6. 向html中添加节点

    简单: ①,js中: (function () { var box=document.querySelector("#box"); var con1=document.create ...

  7. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  8. 原生JS添加节点方法与jQuery添加节点方法的比较及总结

    一.首先构建一个简单布局,来供下边讲解使用 1.HTML部分代码: <div id="div1">div1</div> <div id="d ...

  9. Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器

    Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...

  10. JS添加节点方法与JQuery添加节点方法的比较及总结

    原生JS添加节点方法与JQuery添加节点方法的比较及总结   一.首先构建一个简单布局,来供下边讲解使用 1.HTML部分代码: <div id="div1">div ...

随机推荐

  1. golang之代码检查工具golangci-lint

    日常开发中,想要保证工程中代码能够正常运行, 一般都会使用vet进行代码静态扫描, 但是每次手动执行命令有点不太方便,如果在每次开发完成之后,git提交的时候都进行下检查就OK了,想好就干!!! 这里 ...

  2. elementUI中的级联选择器,默认赋值不起作用

    今天遇到再使用element的级联选择器功能的时候,是多选,默认赋值不起作用. 后来查到是因为少了multiple属性,但是multiple属性要放在props绑定的对象中,而不是直接放在标签上 &l ...

  3. AWMS(ApeosWare Management Suite)的一些配置信息

    富士胶片商业创新的富士施乐打印复印一体机,一般可用被称为亚特兰大(ApeosWare Management Suite)的管理软件. Windows Server 2012 上安装的SQLServer ...

  4. Lambda【1】-- List相关Lambda表达式使用(上篇)

    Lambda在jdk1.8里面已经很好用了,在这里不讲底层的实现,只有简单的用法,会继续补全. 首先一个list我们要使用lambda的话,需要使用它的stream()方法,获取流,才能使用后续的方法 ...

  5. Jenkis 简单介绍—持续集成、持续交付的工具

    Jenkis是什么? 首先是一款持续集成.持续交付的工具. Jenkis的思想是自动化部署:当我们向版本库提交最新的代码后,应用服务器(tomcat)就会自动从Git / svn上拉取最新的包,再重新 ...

  6. 记ios的input框获取焦点之后界面放大问题

    在移动端开发项目中,发现页面在使用 iPhone 访问的时候,点击 input 和 textarea 等文本输入框聚焦 focus() 时,页面会整体放大,而且失去焦点之后页面不能返回原来的样子.检查 ...

  7. 【相邻不同型贪心】LeetCode767 重构字符串

    题解 通常直接思考最佳策略是十分困难的,我们不妨思考每一种情况需要如何处理: 整个字符串只有一种字符 若字符串长度为 \(1\),那么字符串本身即为答案: 若字符串长度大于等于 \(2\),那么不存在 ...

  8. openEuler创建和root一样的账号

    1. 使用以下命令在 openEuler 操作系统的 root 用户下创建管理员用户: useradd -m -G root admin -m 表示创建用户的同时创建用户的主目录, -G 表示将用户添 ...

  9. openEuler-怎么看服务器操作系统是不是欧拉系统?

    ​[root@localhost ~]# cat /etc/os-release NAME="openEuler" VERSION="22.03 (LTS-SP2)&qu ...

  10. 使用 Web Compiler 2022+

    使用 Web Compiler 2022+ Web Compiler 2022+ for Visual Studio 2022 Web Compiler for Visual Studio 2019 ...