dotnet/wpf · error · InvalidEnumArgumentException
InvalidEnumArgumentException("value", (int) value…
Error message
InvalidEnumArgumentException("value", (int) value, typeof(UpdateSourceTrigger)) What it means
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.
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.
Example fix
// before
metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)configValue; // throws if undefined
// after
if (Enum.IsDefined(typeof(UpdateSourceTrigger), configValue))
metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)configValue; Defensive patterns
Strategy: validation
Validate before calling
if (!Enum.IsDefined(typeof(UpdateSourceTrigger), rawValue))
throw new ArgumentOutOfRangeException(nameof(rawValue));
metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)rawValue; Type guard
bool IsValidTrigger(object v) => v is UpdateSourceTrigger t && Enum.IsDefined(typeof(UpdateSourceTrigger), t);
Try / catch
try { metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)raw; }
catch (InvalidEnumArgumentException ex) { log.Warn($"Bad trigger value {raw}"); } Prevention
- Only assign named enum members, never raw ints.
- Parse enum values from config with Enum.TryParse.
When it happens
Trigger: Assigning metadata.DefaultUpdateSourceTrigger = (UpdateSourceTrigger)someInt where someInt is not 0-3 (e.g. a cast raw value from config or interop).
Common situations: Casting integers read from config files or deserialized JSON into UpdateSourceTrigger; porting code where the enum gained members; arithmetic on enum values.
Understand the failure class
Background: "invalid argument", "unknown mode", "not supported": invalid enum-like argument errors explained — this error's family across 19 libraries.
Related errors
- ' ' is not a valid value for ' '.
- ArgumentException(message, name)
- ArgumentNullException(name)
- ArgumentOutOfRangeException(authentication)
- ArgumentOutOfRangeException
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/a84458a63d360111.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/FrameworkPropertyMetadata.cs:481
}
}
/// <summary>
/// The default UpdateSourceTrigger for two-way data bindings on this property.
/// </summary>
public UpdateSourceTrigger DefaultUpdateSourceTrigger
{
// FW_DefaultUpdateSourceTriggerEnumBit1 = 0x40000000,
// FW_DefaultUpdateSourceTriggerEnumBit2 = 0x80000000,
get { return (UpdateSourceTrigger) (((uint) _flags >> 30) & 0x3); }
set
{
if (IsSealed)
{
throw new InvalidOperationException(SR.TypeMetadataCannotChangeAfterUse);
}
if (!BindingOperations.IsValidUpdateSourceTrigger(value))
throw new InvalidEnumArgumentException("value", (int) value, typeof(UpdateSourceTrigger));
if (value == UpdateSourceTrigger.Default)
throw new ArgumentException(SR.NoDefaultUpdateSourceTrigger, nameof(value));
// FW_DefaultUpdateSourceTriggerEnumBit1 = 0x40000000,
// FW_DefaultUpdateSourceTriggerEnumBit2 = 0x80000000,
_flags = (MetadataFlags)(((uint) _flags & 0x3FFFFFFF) | ((uint) value) << 30);
SetModified(MetadataFlags.FW_DefaultUpdateSourceTriggerModifiedID);
}
}
/// <summary>
/// The value of this property should be saved/restored when journaling by URI
/// </summary>
public bool Journal
{
get { return ReadFlag(MetadataFlags.FW_ShouldBeJournaledID); }
setView on GitHub (pinned to 81131a70a4)