using System; using System.Reflection; using System.Windows.Forms; using System.Collections.Generic; using System.IO; using System.ComponentModel; using System.Collections; using System.Text; using System.Threading; using System.Runtime.Serialization.Formatters.Binary; using BrainTechLLC.ThreadSafeObjects; using LinFu.AOP; using LinFu.AOP.Interfaces; namespace BrainTechLLC { [Serializable, AttributeUsage(AttributeTargets.Property)] public class PropertyChangedActionAttribute : Attribute, IReadableAttribute { public string PropertyNameHoldingForeignClass { get; set; } public string PropertyNameInForeignClass { get; set; } public string MethodName { get; set; } public object Value { get { return MethodName; } } public PropertyChangedActionAttribute(string propertyNameHoldingForeignClass, string propertyNameInForeignClass) { PropertyNameInForeignClass = propertyNameInForeignClass; PropertyNameHoldingForeignClass = propertyNameHoldingForeignClass; } public PropertyChangedActionAttribute(string methodName) { MethodName = methodName; } public void SetOnForeignClass(Type t, object thisObject, object newVal) { TypeAndProperties propLookup = t.GetTypeAndProperties(); PropInfo propInfo = propLookup.Lookup[PropertyNameHoldingForeignClass]; object foreignClass = propInfo.GetValue(thisObject); Type foreignType = foreignClass.GetType(); TypeAndProperties propLookup2 = foreignType.GetTypeAndProperties(); PropInfo propInfo2 = propLookup2.Lookup[PropertyNameInForeignClass]; propInfo2.SetValue(foreignClass, newVal); } public MethodInfo GetMethod(Type t) { if (string.IsNullOrEmpty(MethodName)) return null; MethodInfo method = Lookups.GeneralLookup[t.Name + "." + MethodName]; if (method == null) { method = t.GetMethod(MethodName); Lookups.GeneralLookup.AddOrSet(t.Name + "." + MethodName, method); } return method; } } }
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)