翼度科技»论坛 编程开发 .net 查看内容

Nodify学习 二:添加节点

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
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)
 

来源:https://www.cnblogs.com/zt199510/p/18308687
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

x

举报 回复 使用道具