如何使用GongDragDrop拖动ItemsControl的某个元素?

问题描述 投票:0回答:1

我最近开始使用 MVVM。

我有一个名为 TaskBox 的 UserControl,我为它创建了一个 TaskBoxVM。我还有一个 TaskListing 控件和一个 TaskListingVM。在 TaskListing 中,我有一个 ItemsControl,我将 TaskListingVM 中的 TaskBoxVM 集合传递给它。

我使用GongDragDrop 移动ItemsControl 内的项目。一切工作正常,但我想通过单击项目上的按钮来移动项目,而不是单击整个表面。

这是我的 ItemsControl:

<ItemsControl ItemsSource="{Binding TaskBoxes}"
        Margin="30,0,30,0"
        dd:DragDrop.IsDragSource="True"
        dd:DragDrop.IsDropTarget="True"
        dd:DragDrop.UseDefaultDragAdorner="True"
        dd:DragDrop.UseDefaultEffectDataTemplate="True">
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="{x:Type vms:TaskBoxVM}">
            <views:TaskBox DataContext="{Binding}"></views:TaskBox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
c# wpf mvvm drag-and-drop
1个回答
0
投票

以下是如何修改任务框用户控件的示例:

<UserControl x:Class="YourNamespace.TaskBox"
             <!-- Other UserControl attributes -->
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
             xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">
    <Grid>
        <Button Content="Drag" HorizontalAlignment="Center" VerticalAlignment="Center">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <ei:CallMethodAction MethodName="StartDrag" TargetObject="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
        <!-- Other TaskBox content -->
    </Grid>
</UserControl>

在你的TaskBoxVM中,你需要定义StartDrag方法:

public void StartDrag()
{
    DragDrop.DoDragDrop(this, new DataObject(typeof(TaskBoxVM), this), DragDropEffects.Move);
}
© www.soinside.com 2019 - 2024. All rights reserved.