首页 > 其他分享 >Nodify学习 四:预先连接

Nodify学习 四:预先连接

时间:2024-07-22 09:40:18浏览次数:13  
标签:ObservableCollection Nodify 预先 连接 source 连接器 new public

前置

预先连接

可以从连接器创建预先连接,并可以放置在ItemContainerConnector上(如果AllowOnlyConnectors为false)。

预先连接的Content可以使用ContentTemplate进行自定义。如果EnablePreview为true,PreviewTarget将更新为鼠标光标下的连接器或项目容器,或者为null(如果没有这样的元素)

 

预先连接的可见性可以使用IsVisible依赖属性进行控制。

连接器的连接捕捉可以使用EnableSnapping依赖属性启用。

SourceTarget属性是连接器的数据上下文,预先连接完成时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) 

 

标签:ObservableCollection,Nodify,预先,连接,source,连接器,new,public
From: https://www.cnblogs.com/zt199510/p/18315373

相关文章

  • 物联网开发系列(二)·阿里云平台如何建立设备与平台的连接
    目录1. 为产品定义物模型1.1 登陆阿里云平台1.2 编辑草稿1.3 物理模型的配置1.4 查看完整物模型JSON文件        1.5  发布物模型2.  建立设备与平台的连接2.1  准备开发环境2.2 获取设备端C语言的SDK2.3  解压本地的C语言SDK文件,修改......
  • 简单的球场管理系统(仅仅是连接IDEA与数据库不涉及前端,展示主要是在控制台输入输出)
    项目内层分为七层我这里分为(beans,controller,dao,lib,service,test,util)这七层仅展示(controller层)(1)QiuChangControllerimportcom.xszx.beans.Balance;importcom.xszx.beans.Ball;importcom.xszx.beans.JBall;importcom.xszx.beans.User;importcom.xszx.dao......
  • 【QT开发】数据库连接管理QSqlDatabase类详解及实战应用
    QSqlDatabase是Qt提供的一个功能强大且灵活的数据库连接管理类,通过本篇文章的学习,你应该对QSqlDatabase有了全面的理解,能够在自己的项目中正确使用它。QSqlDatabase在用户......
  • ThreadLocal 维护数据库连接、事务管理
    即便添加业务,也不能维护原子性,因为每个Dao都有自己的connection因此,我们需要使用ThreadLocal维护一个唯一的Connectionpackagecom.powernode.bank.mvc;importcom.powernode.bank.exceptions.AppException;importcom.powernode.bank.exceptions.MoneyNotEnoughException;......
  • 虚拟机配置git连接gitee
    1、安装git终端输入sudoapt-getinstallgit2、配置git配置用户名终端输入gitconfig--globaluser.name"yourname",将替换成你的用户名(一般就和gitee上的用户名一致就行)配置邮箱终端输入gitconfig--globaluser.email"youremail",将替换成gitee绑定的邮箱......
  • 【Python将字符串连接在一起】
    当然,Python是一个功能丰富且灵活的语言,有许多技巧和最佳实践可以帮助你更有效地编写代码。以下是一些常见的Python技巧:列表推导式(ListComprehensions):这是一种简洁的构建列表的方法。它比使用循环更加清晰和Pythonic。[x*2forxinrange(5)]#输出:[0,2,4,6,......
  • xshell连接虚拟机
    1、新建连接进入xshell,点击左上角<新建>,新建立一个连接编辑跳出来的属性窗口点击<连接>名称自定义协议默认为SSH主机填写虚拟机的ip地址(在虚拟机终端输入ifconfig命令,根据提示安装相应工具)端口默认为222、启用ssh服务查看虚拟机是否启用ssh服务终端输入ps-e|......
  • 马拉松 - 连接错误
    我希望开始使用Telegram客户端(与Telethon),并收到以下错误。我现在的目标是尝试下载过去几天公共电报组中的历史消息。ConnectionErrorTraceback(mostrecentcalllast)CellIn[2],line41client=TelegramClient(api_name,......
  • Databricks Pyspark 解析连接字符串
    有没有一种简单的方法来解析这种格式的连接字符串?HOST=HostName;Port=1234;ServiceName=Database;USerID=User1;Password=Password123;我需要解析主机和端口、数据库、用户和密码,并将它们分配给单独的变量。importredef解析连接字符串(conn_str):"""解析连接字......
  • 连接被远程主机关闭
    我正在使用Microsoft实时对话头像,它工作正常。错误详细信息:连接已被远程主机关闭。错误代码:1011。错误详细信息:System.AggregateException:发生一个或多个错误。(Status(StatusCode="InvalidArgument",详细USP状态:正在发送。接收到的音频大小:0字节。请注意,它在昨天之前可以......