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标签中的代码变化

posted @ 2024-12-04 11:39  uxinxin  阅读(33)  评论(0)    收藏  举报