public ListElementEventHandler(IOuterControls outerControls)
 {
     outerEventRaisers        = CreateRaiserDefinitions(outerControls);
     addObjectFieldDropRaiser = outerEventRaisers.Single(x =>
                                                         x.Control.ClassListContains(UxmlClassNames.AddItemObjectFieldClassName));
     this.outerControls = outerControls;
 }
        public static IEnumerable <EventRaiserDefinition> CreateRaiserDefinitions(IOuterControls controls)
        {
            void SetExtraEventData(EventBase obj)
            {
                if (!(obj is AddItemEvent evt))
                {
                    throw new ArgumentException($"Expected type: {typeof(AddItemEvent)}");
                }

                evt.Item = controls.AddObjectField.value;
            }

            return(new List <EventRaiserDefinition>
            {
                EventRaiserDefinition.Create <ClearListRequestedEvent>(controls.ClearList),
                EventRaiserDefinition.Create <ClearListEvent>(controls.ClearListConfirm),
                EventRaiserDefinition.Create <ClearListCancelledEvent>(controls.ClearListCancel),
                EventRaiserDefinition.Create <AddItemEvent>(controls.Add),
                EventRaiserDefinition.Create <AddItemEvent>(controls.AddObjectField, SetExtraEventData)
            });
        }