/// <summary> /// the event handler to be attached to every IDataFlowDestionation object /// </summary> /// <param name="sender"></param> /// <param name="propertyName"></param> /// <param name="parameters"></param> private void SinkPullValue(IDataFlowDestionation sender, string propertyName, object[] parameters) { Dictionary <string, Dictionary <DL_Indexer, DL_DataSource> > v1 = null; if (this.ContainsKey(sender)) { v1 = this[sender]; } else { foreach (object v in this.Keys) { if (v is RAIS_A) { if (((RAIS_A)v).IsInstance(sender)) { v1 = this[v]; break; } } } } if (v1 != null) { if (_dataDestinations == null) { _dataDestinations = new Hashtable(); } if (_dataDestinations.ContainsKey(sender)) { return; } _dataDestinations.Add(sender, v1); try { Dictionary <DL_Indexer, DL_DataSource> v2; if (v1.ContainsKey(propertyName)) { v2 = v1[propertyName]; DL_DataSource v3 = null; Dictionary <DL_Indexer, DL_DataSource> .Enumerator e2 = v2.GetEnumerator(); while (e2.MoveNext()) { if (e2.Current.Key.IsSameSignature(parameters)) { v3 = e2.Current.Value; break; } } if (v3 != null) { object value = null; bool bGotValue = false; if (v3.SourceObject is string) { if (_objectManager != null) { object objSource = _objectManager.CurrentItem(v3.SourceObject.ToString()); PropertyInfo piSource = objSource.GetType().GetProperty(v3.PropertyName); value = piSource.GetValue(objSource, parameters); bGotValue = true; } } else { PropertyInfo piSource = v3.SourceObject.GetType().GetProperty(v3.PropertyName); value = piSource.GetValue(v3.SourceObject, parameters); bGotValue = true; } if (bGotValue) { PropertyInfo piDest = sender.GetType().GetProperty(propertyName); piDest.SetValue(sender, value, parameters); } } } } catch { throw; } finally { _dataDestinations.Remove(sender); } } }