c# - How to write a Drop event for a Data Grid -


i tried write drop event data grid in wpf application framework.

xaml

<datagrid>     <i:interaction.behaviors>         <beh:eventtocommandbehavior command="{binding dropcommand}" event="drop" passarguments="true" />     </i:interaction.behaviors> </datagrid> 

viewmodel:

public actioncommand<drageventargs> dropcommand { get; private set; }  this.dropcommand = new actioncommand<drageventargs>(ondrop);  private void ondrop(drageventargs e) {     // ... } 

eventtocommandbehavior:

/// <summary> /// behavior connect ui event viewmodel command, /// allowing event arguments passed commandparameter. /// </summary> public class eventtocommandbehavior : behavior<frameworkelement> {     private delegate _handler;     private eventinfo _oldevent;      // event     public string event { { return (string)getvalue(eventproperty); } set { setvalue(eventproperty, value); } }     public static readonly dependencyproperty eventproperty = dependencyproperty.register("event", typeof(string), typeof(eventtocommandbehavior), new propertymetadata(null, oneventchanged));      // command     public icommand command { { return (icommand)getvalue(commandproperty); } set { setvalue(commandproperty, value); } }     public static readonly dependencyproperty commandproperty = dependencyproperty.register("command", typeof(icommand), typeof(eventtocommandbehavior), new propertymetadata(null));      // passarguments (default: false)     public bool passarguments { { return (bool)getvalue(passargumentsproperty); } set { setvalue(passargumentsproperty, value); } }     public static readonly dependencyproperty passargumentsproperty = dependencyproperty.register("passarguments", typeof(bool), typeof(eventtocommandbehavior), new propertymetadata(false));       private static void oneventchanged(dependencyobject d, dependencypropertychangedeventargs e)     {         var beh = (eventtocommandbehavior)d;          if (beh.associatedobject != null) // not yet attached @ initial load             beh.attachhandler((string)e.newvalue);     }      protected override void onattached()     {         attachhandler(this.event); // initial set     }      /// <summary>     /// attaches handler event     /// </summary>     private void attachhandler(string eventname)     {         // detach old event         if (_oldevent != null)             _oldevent.removeeventhandler(this.associatedobject, _handler);          // attach new event         if (!string.isnullorempty(eventname))         {             eventinfo ei = this.associatedobject.gettype().getevent(eventname);             if (ei != null)             {                 methodinfo mi = this.gettype().getmethod("executecommand", bindingflags.instance | bindingflags.nonpublic);                 _handler = delegate.createdelegate(ei.eventhandlertype, this, mi);                 ei.addeventhandler(this.associatedobject, _handler);                 _oldevent = ei; // store detach in case event property changes             }             else                 throw new argumentexception(string.format("the event '{0}' not found on type '{1}'", eventname, this.associatedobject.gettype().name));         }     }      /// <summary>     /// executes command     /// </summary>     private void executecommand(object sender, eventargs e)     {         object parameter = this.passarguments ? e : null;         if (this.command != null)         {             if (this.command.canexecute(parameter))                 this.command.execute(parameter);         }     } } 

actioncommand:

public class actioncommand<t> : icommand {     public event eventhandler canexecutechanged;     private action<t> _action;      public actioncommand(action<t> action)     {         _action = action;     }      public bool canexecute(object parameter) { return true; }      public void execute(object parameter)     {         if (_action != null)         {             var castparameter = (t)convert.changetype(parameter, typeof(t));             _action(castparameter);         }     } } 

but not working , giving error "cannot bind target method because signature or security transparency not compatible of delegate type".

find classes eventtocommandbehavior , actioncommand classes better understanding code have written , provide me solution .


Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -