我最近开始使用 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>
以下是如何修改任务框用户控件的示例:
<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);
}