public void EventBinding_SimpleActionViaCSharp_Executed()
        {
            var executed = false;
            var button   = XamlReader.Parse <Button>("<Button />");

            button.DataContext = new Action(() => executed = true);
            EventBinding.Bind(button, "Click", "Invoke");

            button.RaiseClickEvent();

            Assert.True(executed);
        }
        public void TestMapNoArgumentCallback()
        {
            confirmationValue = INIT_VALUE;
            IEventBinding binding = new EventBinding();

            binding.Bind(SomeEnum.ONE).To(noArgumentCallback);
            EventCallbackType type = binding.TypeForCallback(noArgumentCallback);

            object[] value     = binding.value as object[];
            Delegate extracted = value[0] as Delegate;

            Assert.AreEqual(EventCallbackType.NO_ARGUMENTS, type);

            extracted.DynamicInvoke(new object[0]);
            //Calling the method should change the confirmationValue
            Assert.AreNotEqual(confirmationValue, INIT_VALUE);
        }
        public void TestMapOneArgumentCallback()
        {
            confirmationValue = INIT_VALUE;
            IEventBinding binding = new EventBinding();

            binding.Bind(SomeEnum.ONE).To(oneArgumentCallback);
            EventCallbackType type = binding.TypeForCallback(oneArgumentCallback);

            object[] value     = binding.value as object[];
            Delegate extracted = value[0] as Delegate;

            Assert.AreEqual(EventCallbackType.ONE_ARGUMENT, type);

            object[] parameters = new object[1];
            parameters [0] = new TestEvent("TEST", null, INIT_VALUE);
            extracted.DynamicInvoke(parameters);
            //Calling the method should change the confirmationValue
            Assert.AreEqual(confirmationValue, INIT_VALUE * INIT_VALUE);
        }
Beispiel #4
0
        public static void Main()
        {
            PopulatedOrganization wonkaFactory = new PopulatedOrganization();

            Organization chocolateDepartment = new Organization();

            #region SINGLE OBJECT EVENT BINDING

            // create the event binding for single object
            EventBinding<Organization, string> eventBinding =
                new EventBinding<Organization, string>();

            // specify the source object and the path to the source binding property that contains the event
            // we want to bind to
            eventBinding.SourceObj = wonkaFactory;
            eventBinding.SourcePathLinks =
                 StringCodePathResolver.ResolveStringPath("TheMostImportantDepartment").ToList();

            // do the binding itself
            eventBinding.Bind();

            // specify the event name (it can be done either before or after bind()
            // method is called
            eventBinding.EventName = "SomethingHappenedInOrgEvent";

            // add the event hanlder whose signature is similar to that of
            // SomethingHappenedInOrgEvent event to the binding
            eventBinding.TheEvent += eventBinding_SomethingHappenedInTheDepartment;

            // nothing is printed to the console because wonkaFactory.TheMostImportantDepartment
            // is still not set to chocolateDepartment object
            chocolateDepartment.FireSomethingHappenedEvent("Augustus Gloop went to the chocolate creek. (Before the department added - should not show)" );

            // set wonkaFactory.TheMostImportantDepartment
            wonkaFactory.TheMostImportantDepartment = chocolateDepartment;

            // this message is printed on the console
            chocolateDepartment.FireSomethingHappenedEvent("Augustus Gloop is out of the game (should show)");

            // unbind the event
            eventBinding.Unbind();

            #endregion SINGLE OBJECT EVENT BINDING

            #region COLLECTION EVENT BINDING

            // create the collection AllDepartments
            wonkaFactory.AllDepartments = new ObservableCollection<Organization>();

            // add chocolate department to it
            wonkaFactory.AllDepartments.Add(chocolateDepartment);

            // create collection event binding
            CollectionEventBinding<Organization, string> collectionEventBinding =
                new CollectionEventBinding<Organization, string>();

            // set the objects that contain the event we want to bind to
            // to be "AllDepartments" collection property of "wonkaFactory" object
            collectionEventBinding.SourceObj = wonkaFactory;
            collectionEventBinding.SourcePathLinks =
                 StringCodePathResolver.ResolveStringPath("AllDepartments").ToList();

            // bind the event
            collectionEventBinding.Bind();

            // set the event name (can be done before or after the binding)
            collectionEventBinding.EventName = "SomethingHappenedInOrgEvent";

            // add event handler
            collectionEventBinding.TheEvent += collectionEventBinding_TheEvent;

            // create gumDepartment
            Organization gumDepartment = new Organization();

            // fire an event (should not be handled since gumDepartment is not part of the collection yet)
            gumDepartment.FireSomethingHappenedEvent("We had great sales (Before the department is added - should not show)");

            // Add gum department to the collection
            wonkaFactory.AllDepartments.Add(gumDepartment);

            // fire the event (should be handled, since now gumDepartment is part of the collection)
            gumDepartment.FireSomethingHappenedEvent("We had great sales (After the department is added - should show)");

            // remove gum department from All Department collection
            // collectionEventBinding should be sufficiently smart to disconnect
            // the event of gumDepartment object from the handler
            wonkaFactory.AllDepartments.Remove(gumDepartment);

            // fire the event again - (the handler should not run, since gumDepartment has been removed from the collection)
            gumDepartment.FireSomethingHappenedEvent("We had great sales (After the department is Removed - should not show)");

            #endregion COLLECTION EVENT BINDING
        }