using System.Windows;
using System.Windows.Input;
namespace TestLauncher.Tools
{
internal class DragDropHelper
{
public static readonly DependencyProperty
DropCommandProperty;
static DragDropHelper()
{
//Drop
DropCommandProperty =
DependencyProperty.RegisterAttached("DropCommand",
typeof(ICommand),
typeof(DragDropHelper),
new
PropertyMetadata(null, OnDropCommandPropertyChanged));
}
public static ICommand
GetDropCommand(DependencyObject source)
{
return
(ICommand)source.GetValue(DropCommandProperty);
}
public static void
SetDropCommand(DependencyObject source, ICommand value)
{
source.SetValue(DropCommandProperty, value);
}
protected static void
OnDropCommandPropertyChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
UIElement uiElement = d as
UIElement;
if (uiElement != null)
{
ICommand oldCommand
= e.OldValue as ICommand;
ICommand newCommand
= e.NewValue as ICommand;
//先反注册上次绑定的事件,再注册新事件
if (oldCommand !=
null)
{
uiElement.Drop -= OnDrop;
}
if (newCommand !=
null)
{
uiElement.Drop += OnDrop;
}
}
}
protected static void OnDrop(object sender,
DragEventArgs e)
{
UIElement uiElement = sender as
UIElement;
if (uiElement != null)
{
ICommand cmd =
GetDropCommand(uiElement);
if (cmd !=
null)
{
if
(cmd.CanExecute(e))
{
cmd.Execute(e);
}
}
}
}
}
}
用法:
<c:ListView Grid.Column="0"
x:Name="mainListView"
BorderThickness="1"
AllowDrop="True"
t:DragDropHelper.DropCommand="{Binding
CommandDrop}"
/> WPF事件转Command示例,布布扣,bubuko.com
WPF事件转Command示例
原文:http://www.cnblogs.com/gdzxk/p/3751222.html