2017-02-06 8 views
1

Мне нужно изменить настольное приложение, которое использует WPF, MVVM и Behaviors для обработки событий. У меня есть задача реализовать Drag & Drop для кнопки. Если пользователь нажмет кнопку, появится всплывающее окно сохранения файла, но если пользователь нажмет на него и перетащит его, он должен отобразить значок файла и позволить пользователю выгрузить его в окно проводника, чтобы сохранить его там.Добавить Drag & Drop с поведением

Я уже добавил пространств имен:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:behaviors="clr-namespace:MyApplication.Desktop.Client.Behaviors" 
xmlns:core="using:Microsoft.Xaml.Interactions.Core" 
xmlns:command="http://www.galasoft.ch/mvvmlight" 

Я также добавил код XAML в кнопку:

<Button Grid.Column="2" 
    Command="{Binding SaveAttachmentCommand}" 
    Visibility="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource boolToVisibilityConverter}}" 
    Style="{StaticResource AttachmentSaveButtonStyle}"> 

    <i:Interaction.Triggers> 
    <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> 
    <command:EventToCommand Command="{Binding LeftMouseButtonDownCommand}"/> 
    </i:EventTrigger> 
    </i:Interaction.Triggers> 

    <i:Interaction.Behaviors> 
    <behaviors:FrameworkElementDragBehavior> 
    </behaviors:FrameworkElementDragBehavior> 
    </i:Interaction.Behaviors> 
</Button> 

Но я не знаю, как сказать, класс поведения (FrameworkElementDragBehavior), какие события обрабатывать и как их обрабатывать (какие функции вызывать).

Я прочитал несколько руководств, но я все еще смущен.

ответ

0

Мне пришлось сделать перетаскивание с MVVM два месяца назад.

После некоторых исследований, personnaly, лучший способ добиться этого - работать с библиотекой «GongSolutions DragDrop». Это очень просто и идеально подходит для того, что вы ищете. Например, в TreeView:

<TreeView ItemsSource="{Binding LstCat}" 
       dd:DragDrop.IsDragSource="True" 
       dd:DragDrop.IsDropTarget="True" 
       dd:DragDrop.DragAdornerTemplate="{StaticResource DragAdorner}"> 
    //Treeview Structure 

    </TreeView> 

Оттуда вы можете сделать Drag & Капля в TreeView. Вы также можете добавить dragAdorner (изображение рядом с указателем при перетаскивании чего-то).

В представленииModel вы можете указать поведение перетаскивания или удаления, реализовав интерфейс, который поставляется с библиотекой. Таким образом вы можете получить доступ к данным, которые вы перетаскиваете. Например:

public void DragOver(IDropInfo dropInfo) 
    { 
     if (dropInfo.Data is Category && dropInfo.TargetItem is Rubrique) 
     { 
      return; 
     } 

     dropInfo.DropTargetAdorner = DropTargetAdorners.Highlight; 
     dropInfo.Effects = DragDropEffects.Move; 
    } 

Вот ссылка на библиотеку, если вы заинтересованы: https://github.com/punker76/gong-wpf-dragdrop

 Смежные вопросы

  • Нет связанных вопросов^_^