// This is called when a car's value changes, and moves the car
    void OnCarProductionChanged(object sender, PropertyValueChange <DateTime> e)
    {
        Car c = sender as Car;

        if (c == null)
        {
            return;
        }
        ProductionToCars[e.OldValue].Remove(c);
        _Add(c);
    }
        //--------------------------------------------------------------------------------------------------

        public void Set(PropertyInfo propertyInfo, Entity instance, object value = null)
        {
            // Note: Only the first value change should be saved, or the original state will be lost.
            var change = _ChangeList.FirstOrDefault(pvc => pvc.IsEqual(propertyInfo));

            if (change != null)
            {
                return;
            }

            change = new PropertyValueChange(propertyInfo);
            change.Update(instance, value);
            _ChangeList.Add(change);
        }
Exemple #3
0
        /// <summary>
        /// Caches the supplied item in the active change tracking service.
        /// </summary>
        /// <typeparam name="T">The system type of the item to cache.</typeparam>
        /// <param name="propertyName">Name of the property.</param>
        /// <param name="value">The value to cache.</param>
        /// <param name="restore">A delegate to call when the change tracking
        /// service needs to restore the cached change.</param>
        /// <param name="commit">A delegate to call when the change tracking
        /// service needs to commit the cached change. Passing a null item for
        /// this parameter means that this instance does not need to be notified when
        /// the change is committed.</param>
        /// <param name="direction">The direction.</param>
        /// <returns>
        /// A reference to the cached change as an instance of <see cref="IChange"/> interface.
        /// </returns>
        protected IChange CacheChange <T>(string propertyName, T value, RejectCallback <T> restore, CommitCallback <T> commit, AddChangeBehavior direction)
        {
            this.EnsureNotDisposed();
            if (this.IsTracking)
            {
                IChange iChange = new PropertyValueChange <T>(this, propertyName, value, restore, commit, string.Empty);

                ((IMemento)this).Memento.Add(iChange, direction);

                return(iChange);
            }

            return(null);
        }
        public void service_validate_a_valid_bookmark_is_true()
        {
            RejectCallback<String> cb = cv => { };
            Object fakeOwner = new Object();
            String change = String.Empty;
            IChange expected = new PropertyValueChange<String>( fakeOwner, "property-name", change, cb );

            ChangeTrackingService svc = new ChangeTrackingService();
            svc.Add( expected, AddChangeBehavior.RedoRequest );

            var bmk = svc.CreateBookmark();

            Assert.IsTrue( svc.Validate( bmk ) );
        }
        public void service_after_add_getChangeSet_return_valid_cSet()
        {
            RejectCallback<String> cb = cv => { };
            Object fakeOwner = new Object();
            String change = String.Empty;
            IChange expected = new PropertyValueChange<String>( fakeOwner, "property-name", change, cb );

            ChangeTrackingService svc = new ChangeTrackingService();
            svc.Add( expected, AddChangeBehavior.RedoRequest );

            IChangeSet cSet = svc.GetChangeSet();

            Assert.AreEqual<IChange>( expected, cSet.First() );
        }
        public void service_after_add_isChanged_is_true()
        {
            RejectCallback<String> cb = cv => { };
            Object fakeOwner = new Object();
            String change = String.Empty;
            PropertyValueChange<String> stub = new PropertyValueChange<String>( fakeOwner, "property-name", change, cb );

            ChangeTrackingService svc = new ChangeTrackingService();
            svc.Add( stub, AddChangeBehavior.RedoRequest );

            Assert.IsTrue( svc.IsChanged );
        }
        public void after_suspend_no_more_changes_can_be_added()
        {
            RejectCallback<String> cb = cv => { };
            Object fakeOwner = new Object();
            String change = String.Empty;
            PropertyValueChange<String> stub = new PropertyValueChange<string>( fakeOwner, "property-name", change, cb );

            ChangeTrackingService svc = new ChangeTrackingService();
            svc.Suspend();

            svc.Add( stub, AddChangeBehavior.RedoRequest );
        }
        public void service_on_dispose_with_changes()
        {
            RejectCallback<String> rc = e => { };
            CommitCallback<String> cc = e => { };
            Object fakeOwner = new Object();
            String change = "Foo";

            var iChange = new PropertyValueChange<String>( fakeOwner, "property-name", change, rc, cc, "" );

            using( ChangeTrackingService svc = new ChangeTrackingService() )
            {
                svc.Add( iChange, AddChangeBehavior.Default );
            }
        }
        public void service_on_change_commit_remove_change_from_changesStack()
        {
            RejectCallback<String> rc = e => { };
            CommitCallback<String> cc = e => { };
            Object fakeOwner = new Object();
            String change = "Foo";

            var iChange = new PropertyValueChange<String>( fakeOwner, "property-name", change, rc, cc, "" );

            ChangeTrackingService svc = new ChangeTrackingService();
            svc.Add( iChange, AddChangeBehavior.Default );

            iChange.Commit( CommitReason.AcceptChanges );

            svc.IsChanged.Should().Be.False();
        }