C# 不同类型可观测采集上的龚wpf dragdrop
假设我的WPF应用程序上有两个可观察到的集合 我需要拖动一个“模块”类型的列表C# 不同类型可观测采集上的龚wpf dragdrop,c#,wpf,c#-4.0,mvvm,drag-and-drop,C#,Wpf,C# 4.0,Mvvm,Drag And Drop,假设我的WPF应用程序上有两个可观察到的集合 我需要拖动一个“模块”类型的列表 放置时不接受不同类型的对象。当您实现IDropTarget接口时,它还需要DragOver方法以及放置方法。在这里,您可以根据dropInfo.Data、dropInfo.SourceCollection和dropInfo.TargetCollection检查类型。确实,您将不再免费获得装饰器,但它可以轻松实现: public void DragOver(IDropInfo dropInfo) { if(dr
放置时不接受不同类型的对象。当您实现
IDropTarget
接口时,它还需要DragOver
方法以及放置方法。在这里,您可以根据dropInfo.Data
、dropInfo.SourceCollection
和dropInfo.TargetCollection
检查类型。确实,您将不再免费获得装饰器,但它可以轻松实现:
public void DragOver(IDropInfo dropInfo)
{
if(dropInfo.Data.GetType() == typeof(MyType))
{
dropInfo.DropTargetAdorner = DropTargetAdorners.Insert;
dropInfo.Effects = DragDropEffects.Copy;
}
}
在此之后,您将在Drop
方法中处理转换和添加到目标集合。请注意,此DragOver
方法假定您没有同时拖动多个项目,在这种情况下,您需要执行不同的类型检查,但装饰器将是相同的
ObservableCollection<TaskInfo> Tasks
<ItemsControl Grid.Row="1" ItemsSource="{Binding Modules}"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="False"
dd:DragDrop.UseDefaultDragAdorner="True">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl Grid.Row="1" Margin="0,0,0,0" dd:DragDrop.IsDragSource="False"
dd:DragDrop.IsDropTarget="True" dd:DragDrop.UseDefaultDragAdorner="True"
dd:DragDrop.DropHandler="{Binding}"
ItemsSource="{Binding Tasks}"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid> </Grid>
</ItemsControl>
public void Drop(IDropInfo dropInfo)
{
public void DragOver(IDropInfo dropInfo)
{
if(dropInfo.Data.GetType() == typeof(MyType))
{
dropInfo.DropTargetAdorner = DropTargetAdorners.Insert;
dropInfo.Effects = DragDropEffects.Copy;
}
}