/// <summary> /// Within this super-ordinate list of (different) instances, identifiy the instances matching /// <c>idShortHead</c> and trigger the instance with infex <c>index</c> on its MasterEvent method /// </summary> public void TriggerSlaveEvents(FormInstanceSubmodelElement masterInst, int masterIndex) { // access var masterDesc = masterInst?.desc as FormDescSubmodelElement; var masterIdShort = masterDesc?.PresetIdShort; if (masterInst == null || masterDesc == null || masterIndex < 0 || masterIdShort == null) { return; } // go up to list of different var pf = this.parentForm; if (pf == null || !(pf is IFormListOfDifferent)) { return; } var lod = (pf as IFormListOfDifferent).GetListOfDifferent(); if (lod == null) { return; } // iterate over this list foreach (var li in lod) { var lisme = li.desc as FormDescSubmodelElement; if (lisme == null || lisme.PresetIdShort == null) { continue; } if (lisme.SlaveOfIdShort == null) { continue; } if (!masterIdShort.StartsWith(lisme.SlaveOfIdShort)) { continue; } if (li.instances == null || li.instances.SubInstances == null || li.instances.SubInstances.Count <= masterIndex) { break; } var slaveSme = li.instances.SubInstances[masterIndex] as FormInstanceSubmodelElement; if (slaveSme != null) { slaveSme.OnSlaveEvent(masterInst.desc as FormDescSubmodelElement, masterInst, masterIndex); } } }
/// <summary> /// Event was raised from master because matching slave. /// </summary> public override void OnSlaveEvent( FormDescSubmodelElement masterDesc, FormInstanceSubmodelElement masterInst, int index) { // access to master var pMasterInst = masterInst as FormInstanceProperty; var pMaster = pMasterInst?.sme as AdminShell.Property; if (pMaster?.value == null) { return; } // accues to this var pThis = this.sme as AdminShell.Property; if (pThis == null) { return; } // desc of this var pDesc = this.desc as FormDescProperty; if (pDesc == null || pDesc.valueFromMasterValue == null || !pDesc.valueFromMasterValue.ContainsKey(pMaster.value.Trim())) { return; } // simply take value pThis.value = pDesc.valueFromMasterValue[pMaster.value.Trim()]; this.Touch(); // refresh if (this.subControl != null && this.subControl is FormSubControlProperty scp) { scp.UpdateDisplay(); } }
/// <summary> /// Event was raised from master because matching slave. /// </summary> public virtual void OnSlaveEvent( FormDescSubmodelElement masterDesc, FormInstanceSubmodelElement masterInst, int index) { }