B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【三】
播放地址:20241120-.NET9.0+WPF实战三类流程化业务逻辑控制-10_哔哩哔哩_bilibili
第7-9课时,简单实现通过NodeModel类及子类实现绑定式的拖拽
新增NodeModel.cs文件实现拖拽信息传递数据记录
1 public abstract class NodeModel 2 { 3 public abstract string Name { get; set; } 4 public abstract void Execute(); 5 }
新增ProcessA.cs,ProcessA.cs,ProcessC.cs,ProcessD.cs文件

1 public class ProcessA : NodeModel 2 { 3 public override string Name { get; set; }="AAAA"; 4 5 public override void Execute() 6 { 7 Debug.WriteLine("正在执行ProcessA"); 8 } 9 } 10 public class ProcessB : NodeModel 11 { 12 public override string Name { get; set; }="BBBB"; 13 14 public override void Execute() 15 { 16 Debug.WriteLine("正在执行ProcessB"); 17 } 18 } 19 public class ProcessC : NodeModel 20 { 21 public override string Name { get; set; }="CCC"; 22 23 public override void Execute() 24 { 25 Debug.WriteLine("正在执行ProcessC"); 26 } 27 } 28 public class ProcessD : NodeModel 29 { 30 public override string Name { get; set; }="DDDD"; 31 32 public override void Execute() 33 { 34 Debug.WriteLine("正在执行ProcessD"); 35 } 36 }
为了实现双向绑定需要安装CommunityToolkit.Mvvm包 在Nuget上搜索communityToolkit,这里安装8.3.2
调整MainViewModel.cs文件中的内容最终代码如下
注意第五行引用,第九行设置类为partial 否则运行报错,26行特性属性主要用于前台点击按钮时调用触发
1 using System.Collections.ObjectModel; 2 using System.Windows.Controls; 3 using System.Windows.Input; 4 using System.Windows; 5 using CommunityToolkit.Mvvm.Input; 6 7 namespace WpfApp2 8 { 9 public partial class MainViewModel 10 { 11 public ObservableCollection<NodeModel> ProcessList { get; set; } = new ObservableCollection<NodeModel>(); 12 13 public void ListViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 14 { 15 DragDrop.DoDragDrop((DependencyObject)sender, (sender as ListViewItem).Content, DragDropEffects.Copy); 16 } 17 18 public void ListBox_Drop(object sender, DragEventArgs e) 19 { 20 string value = e.Data.GetData(typeof(string)).ToString(); 21 ProcessList.Add(new ProcessA()); 22 ProcessList.Add(new ProcessB()); 23 ProcessList.Add(new ProcessC()); 24 ProcessList.Add(new ProcessD()); 25 } 26 [RelayCommand] 27 private void Execute() 28 { 29 foreach (var item in ProcessList) 30 { 31 item.Execute(); 32 } 33 } 34 } 35 }
MainView.xaml文件代码
<Window x:Class="WpfApp2.MainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp2" xmlns:i="http://schemas.microsoft.com/xaml/behaviors" mc:Ignorable="d" WindowStartupLocation="CenterScreen" Background="White" Title="MainView" Height="650" Width="1300"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="200" /> <ColumnDefinition Width="300" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Button Content="执行" HorizontalAlignment="Stretch" Margin="3" Command="{Binding ExecuteCommand}" /> <ListView Grid.Row="1" Grid.Column="0"> <ListViewItem Content="AAA"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers> </ListViewItem> <ListViewItem Content="BBB"></ListViewItem> <ListViewItem Content="CCC"></ListViewItem> <ListViewItem Content="DDD"></ListViewItem> </ListView> <ListBox Grid.Row="1" Grid.Column="1" AllowDrop="True" ItemsSource="{Binding ProcessList}"> <i:Interaction.Triggers> <i:EventTrigger EventName="Drop"> <i:CallMethodAction MethodName="ListBox_Drop" TargetObject="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers> </ListBox> </Grid> </Window>
本节主要演示增加了Button按钮,通过拖拽列表到右侧后,除了界面上增加了内容以后,点击执行按钮,可以通过调试输出窗口看到同时执行了内部的一些逻辑,后续代码复杂之后,可以通过这个逻辑执行解决复杂的问题
第9课主要讲解解释第7-8课代码实现的逻辑以及作用,承上启下告知后续会如何调整代码让使用逻辑更加灵活
标签:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗