private async void SetMethodName(string name) { IObjectEventEditor editor = Editors.OfType <IObjectEventEditor>().First(); if (this.methodName != null) { await editor.DetachHandlerAsync(Event, this.methodName); } if (!String.IsNullOrWhiteSpace(name)) { await editor.AttachHandlerAsync(Event, name); } await UpdateCurrentValueAsync(); }
private void UpdateMembers(IObjectEditor[] removedEditors = null, IObjectEditor[] newEditors = null) { if (this.objEditors.Count == 0) { ClearMembers(); return; } Task <string> nameQuery = null; INameableObject firstNameable = this.objEditors[0] as INameableObject; if (this.objEditors.Count == 1) { nameQuery = firstNameable?.GetNameAsync(); } IObjectEventEditor events = this.objEditors[0] as IObjectEventEditor; var newEventSet = new HashSet <IEventInfo> (events?.Events ?? Enumerable.Empty <IEventInfo> ()); string newTypeName = this.objEditors[0]?.TypeName; var newPropertySet = new HashSet <IPropertyInfo> (this.objEditors[0]?.Properties ?? Enumerable.Empty <IPropertyInfo>()); for (int i = 1; i < this.objEditors.Count; i++) { IObjectEditor editor = this.objEditors[i]; newPropertySet.IntersectWith(editor.Properties); if (editor is IObjectEventEditor) { events = (IObjectEventEditor)editor; newEventSet.IntersectWith(events.Events); } if (firstNameable == null) { firstNameable = editor as INameableObject; } if (newTypeName != editor.TypeName) { newTypeName = String.Format(PropertyEditing.Properties.Resources.MultipleTypesSelected, this.objEditors.Count); } } TypeName = newTypeName; UpdateProperties(newPropertySet, removedEditors, newEditors); EventsEnabled = events != null; UpdateEvents(newEventSet, removedEditors, newEditors); string name = (this.objEditors.Count > 1) ? String.Format(PropertyEditing.Properties.Resources.MultipleObjectsSelected, this.objEditors.Count) : PropertyEditing.Properties.Resources.NoName; if (this.objEditors.Count == 1) { string tname = nameQuery?.Result; if (tname != null) { name = tname; } } SetNameable(firstNameable); SetCurrentObjectName(name, this.objEditors.Count > 1); }
private async Task UpdateMembersAsync(IObjectEditor[] removedEditors = null, IObjectEditor[] newEditors = null) { if (this.objEditors.Count == 0) { ClearMembers(); return; } IObjectEditor editor = this.objEditors[0]; Task <string> nameQuery = null; INameableObject firstNameable = editor as INameableObject; if (this.objEditors.Count == 1) { nameQuery = firstNameable?.GetNameAsync(); } IObjectEventEditor events = editor as IObjectEventEditor; var newEventSet = new HashSet <IEventInfo> (events?.Events ?? Enumerable.Empty <IEventInfo> ()); bool knownProperties = (editor?.KnownProperties?.Count ?? 0) > 0; string newTypeName = editor?.TargetType.Name; var newPropertySet = new HashSet <IPropertyInfo> (editor?.Properties ?? Enumerable.Empty <IPropertyInfo>()); for (int i = 1; i < this.objEditors.Count; i++) { editor = this.objEditors[i]; if (editor == null) { continue; } newPropertySet.IntersectWith(editor.Properties); if (editor is IObjectEventEditor) { events = (IObjectEventEditor)editor; newEventSet.IntersectWith(events.Events); } if (firstNameable == null) { firstNameable = editor as INameableObject; } if (newTypeName != editor.TargetType.Name) { newTypeName = String.Format(PropertyEditing.Properties.Resources.MultipleTypesSelected, this.objEditors.Count); } if (!knownProperties) { knownProperties = (editor.KnownProperties?.Count ?? 0) > 0; } } TypeName = newTypeName; if (knownProperties && this.knownEditors == null) { this.knownEditors = new BidirectionalDictionary <KnownProperty, EditorViewModel> (); } await UpdatePropertiesAsync(newPropertySet, removedEditors, newEditors); EventsEnabled = events != null; UpdateEvents(newEventSet, removedEditors, newEditors); string name = (this.objEditors.Count > 1) ? String.Format(PropertyEditing.Properties.Resources.MultipleObjectsSelected, this.objEditors.Count) : PropertyEditing.Properties.Resources.NoName; if (this.objEditors.Count == 1) { string tname = nameQuery?.Result; if (tname != null) { name = tname; } } SetNameable(firstNameable); SetCurrentObjectName(name, this.objEditors.Count > 1); }