Не могу перетащить события в огонь - PullRequest
0 голосов
/ 20 декабря 2018

Сегодня я колотил головой по столу, пытаясь вызвать события перетаскивания.Функциональность перетаскивания работает на интерфейсе, но события не срабатывают.Мне нужно, чтобы события запускались, чтобы я мог обновить базу данных в соответствии с новым порядком объектов.Что я делаю не так?

В приведенном ниже коде я помещаю точки останова в методы Drop и DragOver, но они никогда не получают удар.

XAML:

<Window x:Class="Reorder_item_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" 
         xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop">
    <Grid>
        <ListBox Grid.Column="1" SelectionMode="Extended" ItemsSource="{Binding MSPCollection}" 
                 dd:DragDrop.IsDragSource="True" Width="300" Margin="0,0,5,0" dd:DragDrop.IsDropTarget="True">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Background="#2ba3d5" Height="50" Width="280">
                        <TextBlock Text="{Binding Name}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="40"/>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

c #:

public class MSP {
    public int Id { get; set; }
    public string Name { get; set; }        
}

class MainViewModel : IDropTarget
    {
        public ObservableCollection<MSP> MSPCollection { get; set; }

        public MainViewModel() {
            MSPCollection = new ObservableCollection<MSP>();

            MSPCollection.Add(new MSP() { 
                Id = 1,
                Name = "Anis Derbel"
            });

            MSPCollection.Add(new MSP()
            {
                Id = 2,
                Name = "Firas Mdimagh"
            });

            MSPCollection.Add(new MSP()
            {
                Id = 3,
                Name = "Khaled Jemni"
            });

            MSPCollection.Add(new MSP()
            {
                Id = 4,
                Name = "Sahbouch"
            });        
        }

        public void DragOver(IDropInfo dropInfo) {
            if (dropInfo.Data is MSP) {
                dropInfo.DropTargetAdorner = DropTargetAdorners.Highlight;
                dropInfo.Effects = DragDropEffects.Move;
            }
        }

        public void Drop(IDropInfo dropInfo) {
            MSP msp = (MSP)dropInfo.Data;
            ((IList)dropInfo.DragInfo.SourceCollection).Remove(msp);
        }
    }

1 Ответ

0 голосов
/ 20 декабря 2018

Вам также необходимо установить DropHandler через соответствующее свойство Attached:

<ListBox ItemsSource="{Binding Collection}"
     dd:DragDrop.IsDragSource="True"
     dd:DragDrop.IsDropTarget="True"
     dd:DragDrop.DropHandler="{Binding}" />

Из документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...