Nodify学习 二:添加节点

打印 上一主题 下一主题

主题 869|帖子 869|积分 2607

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

通过上一篇我们已经创建好了编辑器实例如今我们为编辑器添加一个节点
添加model和viewmodel并将它们绑定到视图
  1. public class NodeViewModel
  2. {
  3.     public string Title { get; set; }
  4. }
复制代码
  1. public class EditorViewModel
  2. {
  3.     public ObservableCollection<NodeViewModel> Nodes { get; } = new ObservableCollection<NodeViewModel>();
  4.     public EditorViewModel()
  5.     {
  6.         Nodes.Add(new NodeViewModel { Title = "Welcome" });
  7.     }
  8. }
复制代码

添加视图模子

 视图模子可以是任何形状,但节点的视图由 ItemTemplate 生成。(将 DataTemplate 放在 NodifyEditor.Resources 中也能实现相同的结果)
  1.   <window
  2.       ....
  3.      xmlns:vm="clr-namespace:NodifySamples2.ViewModels"
  4.       .....
  5. ><br><nodify:NodifyEditor<br>           x:Name="Editor"<br>           ItemsSource="{Binding Nodes}"><br>                         <nodify:NodifyEditor.DataContext><br>                                <vm:EditorViewModel /><br>                       </nodify:NodifyEditor.DataContext><br>                              <nodify:NodifyEditor.ItemTemplate><br>                                   <DataTemplate DataType="{x:Type mod:NodeViewModel}"><br>                                      <nodify:Node Header="{Binding Title}" /><br>                                   </DataTemplate><br>     </nodify:NodifyEditor.ItemTemplate><br></nodify:NodifyEditor>
复制代码
 
结果图


 
添加连接节点

连接节点用于管理节点之间的连接,和绘制对应的连接线
首先,我们必要一个连接器的表示以及节点上一些集合来存储我们的连接器。
  1. public class ConnectorViewModel
  2. {
  3.     public string Title { get; set; }
  4. }
复制代码
  1. public class NodeViewModel
  2. {
  3.     public string Title { get; set; }
  4.     public ObservableCollection<ConnectorViewModel> Input { get; set; } = new ObservableCollection<ConnectorViewModel>();
  5.     public ObservableCollection<ConnectorViewModel> Output { get; set; } = new ObservableCollection<ConnectorViewModel>();
  6. }
复制代码
  1. public class EditorViewModel
  2. {
  3.     public ObservableCollection<NodeViewModel> Nodes { get; } = new ObservableCollection<NodeViewModel>();
  4.     public EditorViewModel()
  5.     {
  6.         Nodes.Add(new NodeViewModel
  7.         {
  8.             Title = "Welcome",
  9.             Input = new ObservableCollection<ConnectorViewModel>
  10.             {
  11.                 new ConnectorViewModel
  12.                 {
  13.                     Title = "输入"
  14.                 }
  15.             },
  16.             Output = new ObservableCollection<ConnectorViewModel>
  17.             {
  18.                 new ConnectorViewModel
  19.                 {
  20.                     Title = "输出"
  21.                 }
  22.             }
  23.         });
  24.     }
  25. }
复制代码
 然后将它们绑定到视图。(我们使用了内置的 NodeInput 和 NodeOutput 作为视图,但也有其他连接器。大概根据必要创建自己的连接器。)
  1. <nodify:NodifyEditor
  2.      x:Name="Editor"
  3.      Background="{StaticResource GridDrawingBrush}"
  4.      ItemsSource="{Binding Nodes}">
  5.      <nodify:NodifyEditor.DataContext>
  6.          <vm:EditorViewModel />
  7.      </nodify:NodifyEditor.DataContext>
  8.      <nodify:NodifyEditor.ItemTemplate>
  9.          <DataTemplate DataType="{x:Type mod:NodeViewModel}">
  10.              <nodify:Node
  11.                  Header="{Binding Title}"
  12.                  Input="{Binding Input}"
  13.                  Output="{Binding Output}">
  14.                  <nodify:Node.InputConnectorTemplate>
  15.                      <DataTemplate DataType="{x:Type mod:ConnectorViewModel}">
  16.                          <nodify:NodeInput Header="{Binding Title}" />
  17.                      </DataTemplate>
  18.                  </nodify:Node.InputConnectorTemplate>
  19.                  <nodify:Node.OutputConnectorTemplate>
  20.                      <DataTemplate DataType="{x:Type mod:ConnectorViewModel}">
  21.                          <nodify:NodeOutput Header="{Binding Title}" />
  22.                      </DataTemplate>
  23.                  </nodify:Node.OutputConnectorTemplate>
  24.              </nodify:Node>
  25.          </DataTemplate>
  26.      </nodify:NodifyEditor.ItemTemplate>
  27. </nodify:NodifyEditor>
复制代码
结果


 
下载地址

Github:zt199510/NodifySamples (github.com)
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表