private protected virtual void ExecuteChangeDiscreteValue(WriteableChangeDiscreteValueOperation operation) { Node ParentNode = operation.ParentNode; string PropertyName = operation.PropertyName; int NewValue = operation.NewValue; IWriteableNodeState State = (IWriteableNodeState)GetState(ParentNode); Debug.Assert(State != null); Debug.Assert(State.ValuePropertyTypeTable.ContainsKey(PropertyName)); Debug.Assert(State.ValuePropertyTypeTable[PropertyName] == Constants.ValuePropertyType.Boolean || State.ValuePropertyTypeTable[PropertyName] == Constants.ValuePropertyType.Enum); int OldValue = NodeTreeHelper.GetEnumValue(State.Node, PropertyName); NodeTreeHelper.GetEnumRange(Type.FromGetType(State.Node), PropertyName, out int Min, out int Max); Debug.Assert(NewValue >= Min && NewValue <= Max); NodeTreeHelper.SetEnumValue(State.Node, PropertyName, NewValue); operation.Update(State, OldValue); NotifyDiscreteValueChanged(operation); }