WPF将多个listviewitems从listview拖放到按钮

WPF将多个listviewitems从listview拖放到按钮,wpf,xaml,listview,drag-and-drop,Wpf,Xaml,Listview,Drag And Drop,我有一个属性SelectionMode设置为Extended的listview 我还有一个垃圾按钮。当用户拖动一个或多个选定项目(如果有多个项目,则使用shift键)并在删除按钮上单击时,我试图对listview上的选定项目执行删除操作 我已经在listview中用一个选中的项目实现了它,它可以正常工作。现在,我尝试对listview中的多个选定项执行相同的操作,但没有成功 当在listview中选择一个项目,并且用户将其从listview拖放到“删除”按钮时,下面的代码起作用: <

我有一个属性SelectionMode设置为Extended的listview

我还有一个垃圾按钮。当用户拖动一个或多个选定项目(如果有多个项目,则使用shift键)并在删除按钮上单击时,我试图对listview上的选定项目执行删除操作

我已经在listview中用一个选中的项目实现了它,它可以正常工作。现在,我尝试对listview中的多个选定项执行相同的操作,但没有成功

当在listview中选择一个项目,并且用户将其从listview拖放到“删除”按钮时,下面的代码起作用:

    <ListView Margin="10" Name="lvUsers" ItemsSource="{Binding Path=Items}" SelectionMode="Extended">
                        <ListView.ItemContainerStyle>
                            <Style TargetType="ListViewItem">                                                               
                                <EventSetter Event="MouseMove"  Handler="lstItems_MouseMove" />
                            </Style>
                        </ListView.ItemContainerStyle>

                        <!-- other stuff -->

    </Listview>

    <Button  AllowDrop="True"  Drop="btnDelete_Drop" Height="64" Width="64" Margin="10" Click="BtnDelete_Click" Content="Delete"/>
listview上的每个listviewitem的数据类型如下:

   public class DataModel
    {
        public string Name
        {
            get;
            set;
        }

        public int Age
        {
            get;
            set;
        }

        public string Mail
        {
            get;
            set;
        }
    }
例如,当用户将拖动的listviewitem放在delete按钮上时,我会显示一个带有此人姓名的消息框

如何执行相同的操作,而不是从listview拖放一个项目,而是对多个选定的listviewitems执行相同的操作?一旦下降,在
btnDelete\u Drop我想迭代所有删除的ListView项并做一些事情。

我刚刚实现了一个有效的解决方案。我用以下方法替换了lstItem\u MouseMove和btnDelete\u Drop-in-code-behind方法:

private void lstItem_MouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        if (e.Source != null)
        {
                List<DataModel> myList = new List<DataModel>();
                foreach (DataModel Item in lvUsers.SelectedItems)
                {
                    myList.Add(Item);
                }                 

                DataObject dataObject = new DataObject(myList);                    
                DragDrop.DoDragDrop(lvUsers, dataObject, DragDropEffects.Move);               
        }
    }
}


private void btnDelete_Drop(object sender, DragEventArgs e)
{
        Type myType = typeof(List<DataModel>);

        List<DataModel> selectedItems = e.Data.GetData(myType) as List<DataModel>;

        string hello = "Hello ";
        foreach (DataModel dm in selectedItems)
        {
            hello = hello + ", " + dm.Name;
        }

        MessageBox.Show(hello);
}
private void lstItem\u MouseMove(对象发送方,MouseEventArgs e)
{
如果(e.LeftButton==鼠标按钮状态。按下)
{
如果(e.Source!=null)
{
List myList=新列表();
foreach(lvUsers.SelectedItems中的数据模型项)
{
myList.Add(项目);
}                 
DataObject DataObject=新的DataObject(myList);
DoDragDrop.DoDragDrop(lvUsers、dataObject、DragDropEffects.Move);
}
}
}
私有无效btnDelete\U Drop(对象发送方、DRAGEVENTTARGS e)
{
类型myType=typeof(列表);
将selectedItems=e.Data.GetData(myType)列为列表;
string hello=“hello”;
foreach(selectedItems中的数据模型dm)
{
hello=hello+“,”+dm.Name;
}
MessageBox.Show(你好);
}
这是可行的,但也许还有其他更好的解决方案。欢迎提出任何建议

private void lstItem_MouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        if (e.Source != null)
        {
                List<DataModel> myList = new List<DataModel>();
                foreach (DataModel Item in lvUsers.SelectedItems)
                {
                    myList.Add(Item);
                }                 

                DataObject dataObject = new DataObject(myList);                    
                DragDrop.DoDragDrop(lvUsers, dataObject, DragDropEffects.Move);               
        }
    }
}


private void btnDelete_Drop(object sender, DragEventArgs e)
{
        Type myType = typeof(List<DataModel>);

        List<DataModel> selectedItems = e.Data.GetData(myType) as List<DataModel>;

        string hello = "Hello ";
        foreach (DataModel dm in selectedItems)
        {
            hello = hello + ", " + dm.Name;
        }

        MessageBox.Show(hello);
}