Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不同类型可观测采集上的龚wpf dragdrop_C#_Wpf_C# 4.0_Mvvm_Drag And Drop - Fatal编程技术网

C# 不同类型可观测采集上的龚wpf dragdrop

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

假设我的WPF应用程序上有两个可观察到的集合

我需要拖动一个“模块”类型的列表


放置时不接受不同类型的对象。

当您实现
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;
    }
}