c# - WPF How to listen to a BindingBase object? -


i want create special datatrigger inheriting triggerbase<frameworkelement>. similar datatrigger, property of type bindingbase has been defined in mydatatrigger class.

how can listen in order trace changes?

public class mydatatrigger : triggerbase<frameworkelement> {     ...      /// <summary>     /// [wrapper property bindingproperty]     /// <para>     /// gets or sets binding produces property value of data object.     /// </para>     /// </summary>     public bindingbase binding     {         { return (bindingbase)getvalue(bindingproperty); }         set { setvalue(bindingproperty, value); }     }      public static readonly dependencyproperty bindingproperty =         dependencyproperty.register("binding",                                     typeof(bindingbase),                                     typeof(mydatatrigger),                                     new frameworkpropertymetadata(null));  } 

update:

the main problem don't know how find bindingbase associated dependencyproperty. know how listen dp;

void listentodp(object component, dependencyproperty dp) {     dependencypropertydescriptor dpdescriptor = dependencypropertydescriptor.fromproperty(dp, component.gettype());     dpdescriptor.addvaluechanged(component, dplistener_valuechanged); } 

where dplistener_valuechanged eventhandler delegate. here, component parameter value this.associatedobject.

okay, found!

considering answer, binding not dp. tried find binding associated dp:

type type = binding.gettype(); propertypath propertypath = (propertypath)(type.getproperty("path").getvalue(binding)); string propertyname = propertypath.path; 

complete code:

public class mydatatrigger : triggerbase<frameworkelement> {     ...      public bindingbase binding     {         get;         set;     }      protected override void onattached()     {         base.onattached();          if (binding != null && this.associatedobject.datacontext != null)             //             // adding property changed listener..             //             type type = binding.gettype();             propertypath propertypath = (propertypath)(type.getproperty("path").getvalue(binding));             string propertyname = propertypath.path;              typedescriptor.getproperties(this.associatedobject.datacontext).find(propertyname, false).addvaluechanged(this.associatedobject.datacontext, propertylistener_valuechanged);     }      private void propertylistener_valuechanged(object sender, eventargs e)     {         // stuff here..     } } 

Comments

Popular posts from this blog

android - getbluetoothservice() called with no bluetoothmanagercallback -

sql - ASP.NET SqlDataSource, like on SelectCommand -

ios - Undefined symbols for architecture armv7: "_OBJC_CLASS_$_SSZipArchive" -