2017-03-02 22 views
0

私のWPFアプリケーションでObservableCollectionが2つあるとしましょう。違うタイプのobservablecollectionにgong-wpf-dragdrop

私はモジュールは、タスクリストの中に落下している場合は、私が行います
ObservableCollection<TaskInfo> Tasks 

「タスク」

タイプのリストに
ObservableCollection<IModuleInfo> Modules 

「モジュール」タイプの1つのリストをドラッグする必要が

最初にモジュールをタスクに変換してから、新しいタスクをリストに追加します。

私はgong-wpf-dragdropを使用していますが、デフォルトのアドオンが良いです。 どうすればいいですか?他の場所で解決策を見つけることができません。私は、ビューモデルにIDropTargetを実装している

<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) 
    { 

が受け入れないように思える:

<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> 

ドロップターゲットになります異なるタイプのオブジェクトをドロップします。

答えて

0

IDropTargetインターフェイスを実装するときには、ドロップメソッドと同様にDragOverメソッドが必要になります。 dropInfo.DatadropInfo.SourceCollectiondropInfo.TargetCollectionに基づいてタイプを確認することができます。あなたがもはや自由のためのadornerを取得することは事実ではありませんが、それは容易に実現することができます。

public void DragOver(IDropInfo dropInfo) 
{ 
    if(dropInfo.Data.GetType() == typeof(MyType)) 
    { 
     dropInfo.DropTargetAdorner = DropTargetAdorners.Insert; 
     dropInfo.Effects = DragDropEffects.Copy; 
    } 
} 

この後、あなたは、変換とDrop方法でターゲットコレクションへの追加を扱うでしょう。このDragOverメソッドは、複数の項目を同時にドラッグしないことを前提としています。その場合は、異なるタイプチェックを行う必要がありますが、アダプターは同じになります。

関連する問題