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 文档的痛点: 文档需 ...
随机推荐
- 2023NOIP A层联测20 T3 点餐
2023NOIP A层联测20 点餐 题目很好,可惜考试没想到. 思路 可以按照 \(b\) 从小到大排序,固定选择个数 \(k\),枚举选择的盘子 \(x\) 的 \(b\) 最大,最优解肯定是贪心 ...
- Vue 实现图片下拉选择控件
element-ui 的组件库中没有图片下拉选择组件,基于 el-select 组件做的改动并不能完全满足需求,因此决定重写一个. 从头到尾做下来收获很多,我决定把实现过程中遇到的问题记录一下. 效果 ...
- gh-ost工具在线改表过程的详细解析
gh-ost,是github开源的一款在线修改MySQL表结构的工具https://github.com/github/gh-ost/,它不使用pt-osc的触发器机制,而是使用解析binlog来实现 ...
- python3安装与使用(Linux)
之前写过有关Windows下的python3的安装与使用,这次看一下Linux下的python3 1. 安装依赖环境 yum -y install zlib-devel bzip2-devel ope ...
- Codeforces Round 732 (Div
AquaMoon and Strange Sort 有 \(n\) 个人从左到右站成一排,从左数第 \(i\) 个人的衣服上印着 \(a_i\).每个人的朝向可以是朝左.朝右.一开始所有人的方向都是朝 ...
- 2022 Hangzhou Normal U Summer Trials
Subarrays 给定一个长度为n的由正整数组成的序列,请你输出该序列中子段和能被\(k\)整除的所有符合要求的子段数量 题解:组合计数 + 前缀和 + 思维 \[sum[l,r]\ \ mod\ ...
- 实现ELF文件解析,支持-h, -S, -s
ELF文件 编译和链接 ELF代表Executable and Linkable Format,是类Unix平台最通用的二进制文件格式.下面三种文件的格式都是ELF. 目标文件.o 动态库文件.so ...
- seldom-platform:颠覆传统的自动化测试平台
seldom-platform:颠覆传统的自动化测试平台 seldom-platform是一个自动化测试平台,其特点是让会写代码的测试人员能够通过seldom框架高效地完成自动化用例的编写,并将剩下的 ...
- Spring Cloud Alibaba:一站式微服务解决方案
一.简介 Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理.配置管理.服务发现.消息总线等问题而设计. ...
- Jetpack Compose学习(15)——Pager组件的使用(对标ViewPager)
原文地址: Jetpack Compose学习(15)--Pager组件的使用(对标ViewPager)-Stars-One的杂货小窝 从名字可以看出,Pager这个就是ViewPager的替代产物 ...