I am trying to attach an event handler to the drop event on some LibraryBars on the Surface table (v1.0, .NET 3.5) so that I can move elements to various ObservableCollections.
I can fire events on all the related drag n' drop events (such as PreviewDrop, DragEnter) EXCEPT the Drop event itself - the most important part. When I took a look into who was handling the event through Snoop, it seems to be marked as handled by the Grid.
XAML:
<Grid Background="{StaticResource WindowBackground}">
<s:LibraryBar
x:Name="startingBar"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemsSource="{Binding Path=sourceList}"
ItemTemplate="{StaticResource LibraryBarTemp}"
AllowDrop="True">
</s:LibraryBar>
<s:LibraryBar
x:Name="destinationBar"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
AllowDrop="True"
s:SurfaceDragDrop.PreviewDrop="OnPreviewDrop"
s:SurfaceDragDrop.Drop="OnDropCompleted"
ItemTemplate="{StaticResource LibraryBarTemp}"
ItemsSource="{Binding Path=testList}">
</s:LibraryBar>
</Grid>
And C#:
public SurfaceWindow1()
{
InitializeComponent();
// Add handlers for Application activation events
AddActivationHandlers();
sourceList.Add(new Player("Jane"));
sourceList.Add(new Player("Joe"));
sourceList.Add(new Player("Jill"));
sourceList.Add(new Player("Julia"));
sourceList.Add(new Player("John"));
startingBar.ItemsSource = sourceList;
}
#region OnPreviewDrop
private void OnPreviewDrop(object sender, SurfaceDragDropEventArgs e)
{
if (startingBar.IsAncestorOf(e.Cursor.DragSource))
{
e.Effects = DragDropEffects.Move;
}
}
private void OnDropCompleted(object sender, SurfaceDragDropEventArgs e)
{
sourceList.Remove(e.Cursor.Data as Player);
testList.Add(e.Cursor.Data as Player);
}
Maybe I have been staring at this too long and there's a simple solution. The MSDN says that LibraryBars come ready to handle drag and drop, so I am confused why the event would be bubbling up. How do I get the event to fire so I can add to the lists?
Thanks for any help!
EDIT: Added some more information -When "OnDropCompleted" is attached to anything else (such as the DragEnter event), the ObservableCollections are added to and removed from, but I need it on the Drop event itself.