B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【四】
播放地址:20241120-.NET9.0+WPF实战三类流程化业务逻辑控制-10_哔哩哔哩_bilibili
第10节 通过调整MainViewModel文件代码实现判断拖拽对象并生成对应组件
public partial class MainViewModel { public ObservableCollection<NodeModel> ProcessList { get; set; } = new ObservableCollection<NodeModel>(); public void ListViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { DragDrop.DoDragDrop((DependencyObject)sender, (sender as ListViewItem).Tag, DragDropEffects.Copy); } public void ListBox_Drop(object sender, DragEventArgs e) { string tag = e.Data.GetData(typeof(string)).ToString(); //反射 //根据字符串获取类型 Type type = Assembly.GetEntryAssembly().GetType("WpfApp2." + tag); //根据类型创建实例 NodeModel instance = (NodeModel)Activator.CreateInstance(type); ProcessList.Add(instance); } [RelayCommand] private void Execute() { foreach (var item in ProcessList) { item.Execute(); } } }
调整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" Tag="ProcessA"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers> </ListViewItem> <ListViewItem Content="BBB" Tag="ProcessB"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers></ListViewItem> <ListViewItem Content="CCC" Tag="ProcessC"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers></ListViewItem> <ListViewItem Content="DDD" Tag="ProcessD"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers></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.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}"> </TextBlock> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid> </Window>
重点是ListBox标签中的代码变化

浙公网安备 33010602011771号