{"record":{"id":"a84458a63d360111","repo":"dotnet/wpf","slug":"invalidenumargumentexception-value-int-value-typeof-a84458","errorCode":null,"errorMessage":"InvalidEnumArgumentException(\"value\", (int) value, typeof(UpdateSourceTrigger))","messagePattern":"InvalidEnumArgumentException\\(\"value\", \\(int\\) value, typeof\\(UpdateSourceTrigger\\)\\)","errorType":"exception","errorClass":"InvalidEnumArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/FrameworkPropertyMetadata.cs","lineNumber":481,"sourceCode":"            }\n        }\n\n        /// <summary>\n        ///    The default UpdateSourceTrigger for two-way data bindings on this property.\n        /// </summary>\n        public UpdateSourceTrigger DefaultUpdateSourceTrigger\n        {\n            // FW_DefaultUpdateSourceTriggerEnumBit1        = 0x40000000,\n            // FW_DefaultUpdateSourceTriggerEnumBit2        = 0x80000000,\n            get { return (UpdateSourceTrigger) (((uint) _flags >> 30) & 0x3); }\n            set\n            {\n                if (IsSealed)\n                {\n                    throw new InvalidOperationException(SR.TypeMetadataCannotChangeAfterUse);\n                }\n                if (!BindingOperations.IsValidUpdateSourceTrigger(value))\n                    throw new InvalidEnumArgumentException(\"value\", (int) value, typeof(UpdateSourceTrigger));\n                if (value == UpdateSourceTrigger.Default)\n                    throw new ArgumentException(SR.NoDefaultUpdateSourceTrigger, nameof(value));\n\n                // FW_DefaultUpdateSourceTriggerEnumBit1        = 0x40000000,\n                // FW_DefaultUpdateSourceTriggerEnumBit2        = 0x80000000,\n                _flags = (MetadataFlags)(((uint) _flags & 0x3FFFFFFF) | ((uint) value) << 30);\n                SetModified(MetadataFlags.FW_DefaultUpdateSourceTriggerModifiedID);\n            }\n        }\n\n\n        /// <summary>\n        ///     The value of this property should be saved/restored when journaling by URI\n        /// </summary>\n        public bool Journal\n        {\n            get { return ReadFlag(MetadataFlags.FW_ShouldBeJournaledID); }\n            set","sourceCodeStart":463,"sourceCodeEnd":499,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/FrameworkPropertyMetadata.cs#L463-L499","documentation":"The DefaultUpdateSourceTrigger setter validates the assigned value with BindingOperations.IsValidUpdateSourceTrigger and throws InvalidEnumArgumentException when the value is not a defined UpdateSourceTrigger member. WPF stores the trigger in two flag bits, so only valid enum values are accepted.","triggerScenarios":"Assigning metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)someInt where someInt is not 0-3 (e.g. a cast raw value from config or interop).","commonSituations":"Casting integers read from config files or deserialized JSON into UpdateSourceTrigger; porting code where the enum gained members; arithmetic on enum values.","solutions":["Assign only named enum members: UpdateSourceTrigger.Default, PropertyChanged, LostFocus, Explicit.","Validate the source value with Enum.IsDefined(typeof(UpdateSourceTrigger), value) before casting/assigning.","If parsing from text, use Enum.TryParse<UpdateSourceTrigger> and reject failures."],"exampleFix":"// before\nmetadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)configValue; // throws if undefined\n// after\nif (Enum.IsDefined(typeof(UpdateSourceTrigger), configValue))\n    metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)configValue;","handlingStrategy":"validation","validationCode":"if (!Enum.IsDefined(typeof(UpdateSourceTrigger), rawValue))\n    throw new ArgumentOutOfRangeException(nameof(rawValue));\nmetadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)rawValue;","typeGuard":"bool IsValidTrigger(object v) => v is UpdateSourceTrigger t && Enum.IsDefined(typeof(UpdateSourceTrigger), t);","tryCatchPattern":"try { metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)raw; }\ncatch (InvalidEnumArgumentException ex) { log.Warn($\"Bad trigger value {raw}\"); }","preventionTips":["Only assign named enum members, never raw ints.","Parse enum values from config with Enum.TryParse."],"tags":["wpf","enums","argument-validation"],"backgroundTag":"invalid-enum-argument","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}