private void ProcessMultiGlobalCommandInvalidators(IMultiGlobalCommand multiGlobalCommand) { multiGlobalCommand.OnCommandsComputed += (oldCommands, newCommands) => { var associatedInvalidationSubscriptions = MultiCommandsSubscriptions.Where(o => oldCommands.Contains(o.Object)).ToList(); foreach (var subscription in associatedInvalidationSubscriptions) { subscription.Break(); } foreach (var command in newCommands) { foreach (var metadata in command.Metadata.OfType <IAutoInvalidateMetadata>()) { var token = metadata.AttachMetadataDefinition(EventAggregator, () => command.RaiseCanExecuteChanged()); MultiCommandsSubscriptions.Add(new Subscription() { Event = EventAggregator.GetEvent(metadata.EventType), Object = command, Token = token }); } } }; foreach (var metadata in multiGlobalCommand.Metadata.OfType <IAutoInvalidateMetadata>()) { metadata.AttachMetadataDefinition(EventAggregator, () => multiGlobalCommand.ComputeCommands()); } }
public TMetadata GetMultiMenuMetadata <TMetadata>(IMultiGlobalCommand multiGlobalCommand) where TMetadata : IMultiMainMenuMetadata { return(multiGlobalCommand.Metadata.OfType <MultiMainMenuOption>().Single().OfType <TMetadata>().SingleOrDefault()); }