public void DelayedPropertyChangeNotifications()
        {
            dynamic        i   = new TestItems.Item();
            IPropertyOwner ipo = (IPropertyOwner)i;
            List <string>  log = CreateItemPropertyNotificationLog(i);

            i.Name = "Good name"; // ⚡Name Changing, Changed
            log.Add("after Name");
            i.Cost = 1;           // ⚡Cost and CostIsDefaulted Changing, Changed
            log.Add("after Cost");
            CollectionAssert.AreEqual(new[] {
                "-Name: ", "+Name: Good name", "after Name",
                "-Cost: 43", "-CostIsDefaulted: True", "+Cost: 1", "+CostIsDefaulted: False", "after Cost"
            }, log);

            log.Clear();
            using (ipo.DelayedPropertyChangeNotification()) {
                i.Name = "No name";      // ⚡Name Changing
                log.Add("after Name");
                i.Cost = 2;              // ⚡Cost Changing
                log.Add("after Cost");
                i.Name = "Another name"; // no ⚡
                CollectionAssert.AreEqual(new[] { "-Name: Good name", "after Name", "-Cost: 1", "after Cost" }, log);
                log.Clear();
            } // ⚡Name and Cost Changed
            CollectionAssert.AreEqual(new[] { "+Name: Another name", "+Cost: 2" }, log);

            Assert.AreEqual(default(decimal), i.Price);
            i.Price = 144M;
            Assert.AreEqual(144M, i.Price);
            log.Clear();
            i["Price"] = null;
            Assert.AreEqual(0M, i.Price);
            i.Price = 89;
            CollectionAssert.AreEqual(new[] { "-Price: 144", "+Price: 0", "-Price: 0", "+Price: 89" }, log);
        }