Nodify学习 四:预先连接
前置
预先连接
可以从连接器创建预先连接,并可以放置在ItemContainer
或Connector
上(如果AllowOnlyConnectors
为false)。
预先连接的Content
可以使用ContentTemplate
进行自定义。如果EnablePreview
为true,PreviewTarget
将更新为鼠标光标下的连接器或项目容器,或者为null
(如果没有这样的元素)
预先连接的可见性可以使用IsVisible
依赖属性进行控制。
连接器的连接捕捉可以使用EnableSnapping
依赖属性启用。
Source
和Target
属性是连接器的数据上下文,预先连接完成时Target
将更新。
还有一个StartedCommand
,参数是Source
,以及一个CompletedCommand
,参数是Target
。
提示:取消预先连接的方法是释放右键。
预先连接从一个 Source
开始,当放置到一个 Target
上时将完成。源始终是一个连接器,目标可以是一个连接器、一个项目容器或 null
。我们现在只关心其他连接器。当连接开始时,执行 StartedCommand
,该命令接收 Source
作为参数。当连接完成时,执行 CompletedCommand
,该命令接收 Target
作为参数。
操作
首先我们需要创建预先连接的视图模型类,并将其添加到 EditorViewModel
中。
public class PendingConnectionViewModel : ObservableObject
{
private readonly EditorViewModel _editor;
private ConnectorViewModel _source; public PendingConnectionViewModel(EditorViewModel editor)
{
_editor = editor;
StartCommand = new DelegateCommand<ConnectorViewModel>(source => _source = source);
FinishCommand = new DelegateCommand<ConnectorViewModel>(target =>
{
if (target != null)
_editor.Connect(_source, target);
});
} public ICommand StartCommand { get; }
public ICommand FinishCommand { get; }
}
public class EditorViewModel
{
public ObservableCollection<NodeViewModel> Nodes { get; } = new ObservableCollection<NodeViewModel>();
public ObservableCollection<ConnectionViewModel> Connections { get; } = new ObservableCollection<ConnectionViewModel>(); public PendingConnectionViewModel PendingConnection { get; }
public EditorViewModel()
{ PendingConnection = new PendingConnectionViewModel(this);
var welcome = new NodeViewModel
{
Title = "我的第一个节点",
Input = new ObservableCollection<ConnectorViewModel>
{
new ConnectorViewModel
{
Title = "输入"
}
},
Output = new ObservableCollection<ConnectorViewModel>
{
new ConnectorViewModel
{
Title = "输出"
}
}
}; var nodify = new NodeViewModel
{
Title = "节点1",
Input = new ObservableCollection<ConnectorViewModel>
{
new ConnectorViewModel
{
Title = "输入"
}
}
};
Nodes.Add(welcome);
Nodes.Add(nodify); } public void Connect(ConnectorViewModel source, ConnectorViewModel target)
{
var newConnection = new ConnectionViewModel(source, target); // 检查是否已经存在相同的连接
if (!Connections.Contains(newConnection))
{
Connections.Add(newConnection);
}
}
}
<nodify:NodifyEditor PendingConnection="{Binding PendingConnection}">
...
<nodify:NodifyEditor.PendingConnectionTemplate>
<DataTemplate DataType="{x:Type local:PendingConnectionViewModel}">
<nodify:PendingConnection StartedCommand="{Binding StartCommand}"
CompletedCommand="{Binding FinishCommand}"
AllowOnlyConnectors="True" />
</DataTemplate>
</nodify:NodifyEditor.PendingConnectionTemplate>
...
</nodify:NodifyEditor>
这就是创建连接的全部内容。现在你应该可以在连接器之间创建连接了。
代码地址
Github(NodifySamples4):zt199510/NodifySamples (github.com)
Nodify学习 四:预先连接的更多相关文章
- spring boot 学习(四)Druid连接池的使用配置
Druid介绍 Druid是一个JDBC组件,druid 是阿里开源在 github 上面的数据库连接池,它包括三部分: * DruidDriver 代理Driver,能够提供基于Filter-Cha ...
- (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合
http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...
- TweenMax动画库学习(四)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- SVG 学习<四> 基础API
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Android JNI学习(四)——JNI的常用方法的中文API
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- MySQL学习(一)——Java连接MySql数据库
MySQL学习(一)——Java连接MySql数据库 API详解: 获得语句执行 String sql = "Insert into category(cid, cname) values( ...
- SCARA——OpenGL入门学习四(颜色)
OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...
- SQL的四种连接
SQL的四种连接-内连接.左外连接.右外连接.全连接 今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图 ...
- ZigBee学习四 无线+UART通信
ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
随机推荐
- tsconfig配置详解
{ "compilerOptions": { /* Basic Options */ "target": "es5" /* target用于 ...
- 周末基于 .NET 9 + K8S 写了个 MockHttp
MockHTTP MockHTTP 可以将现有HTTP转换成GET请求,设置cron定时调用,自定义代码去格式化数据,通知到你的邮箱里. 比如每天早上时自动获取博客园文章列表,天气下雨时通知,各类签到 ...
- 时序数据库之InfluxDB
涉及用户认证: shangmayuan.com/a/1056241c80ef4dfc9cef830d.html
- python开发包之远程隧道链接sshtunnel
缘起: 公司很多的数据库的链接都是本地连接或者指定ip地址可以访问, 如果你没有该ip权限, 但是你可以登录该数据库所在的服务器, 这个时候就可以使用ssh链接上这个服务器,以此为跳板进行数据库的链接 ...
- 元数建模工具之chiner
chiner,发音:[kaɪˈnər],使用React+Electron+Java技术体系构建的一款元数建模平台. 下载地址:https://gitee.com/robergroup/chiner/r ...
- Redis为什么这么快之IO多路复用
情景复现 面试官:Redis为什么这么快? 我:1. 基于内存 2. 高效数据结构 3. 单线程 4. IO多路复用 面试官:那你讲讲Redis的IO多路复用模型是什么. 我:哦,嗯,啊,呀...IO ...
- ZCMU-1133
emm就直接看的前辈的了. 唉 #include <stdio.h> #include <string.h> #include <algorithm> //我不成熟 ...
- OceanBase 的探索与实践
作者:来自 vivo 互联网数据库团队- Xu Shaohui 本文总结了目前我们遇到的痛点问题并通过 OceanBase 的技术方案解决了这些痛点问题,完整的描述了 OceanBase 的实施落地, ...
- 树莓派4B 关闭休眠,关闭屏保
1.安装 sudo apt install xscreensaver 2.打开xscreensaver sudo xscreensaver-demo 3.设置 参考:https://zhuanlan. ...
- 百度地图各种控件:地图平移缩放控件NavigationControl、地图类型控件MapTypeControl
注:代码复制即可用,标色代码为主要代码 百度地图提供了如下控件: 1.Control:控件的抽象基类,所有控件均继承此类的方法.属性.通过此类您可实现自定义控件. 2.NavigationContro ...