dotnet/wpf · error · InvalidEnumArgumentException
InvalidEnumArgumentException("value", (int) value…
Error message
InvalidEnumArgumentException("value", (int) value, typeof(UpdateSourceTrigger)) What it means
The Binding.UpdateSourceTrigger setter maps the UpdateSourceTrigger value via FlagsFrom; an unrecognized value yields BindingFlags.IllegalInput and throws InvalidEnumArgumentException for parameter 'value'. Only PropertyChanged, LostFocus, Explicit, and Default are accepted.
Solutions
- Assign only valid UpdateSourceTrigger members (Default, PropertyChanged, LostFocus, Explicit).
- Guard with Enum.IsDefined(typeof(UpdateSourceTrigger), value) before assignment.
- Fall back to UpdateSourceTrigger.Default for unknown persisted values.
Example fix
// before binding.UpdateSourceTrigger = (UpdateSourceTrigger)stored; // after binding.UpdateSourceTrigger = Enum.IsDefined(typeof(UpdateSourceTrigger), stored) ? (UpdateSourceTrigger)stored : UpdateSourceTrigger.Default;
Defensive patterns
Strategy: validation
Validate before calling
if (!Enum.IsDefined(typeof(UpdateSourceTrigger), value))
throw new InvalidEnumArgumentException(nameof(value), (int)value, typeof(UpdateSourceTrigger));
binding.UpdateSourceTrigger = (UpdateSourceTrigger)value; Type guard
static bool IsValidTrigger(int v) => Enum.IsDefined(typeof(UpdateSourceTrigger), v);
Try / catch
try { binding.UpdateSourceTrigger = (UpdateSourceTrigger)stored; } catch (InvalidEnumArgumentException) { binding.UpdateSourceTrigger = UpdateSourceTrigger.Default; } Prevention
- Restrict selectable values in UI builders to the four defined UpdateSourceTrigger members.
- Validate enum round-trips through config/serialization.
- Default to UpdateSourceTrigger.Default for unrecognized values.
When it happens
Trigger: binding.UpdateSourceTrigger = (UpdateSourceTrigger)42; ints deserialized from config cast unchecked into the enum; code generators emitting wrong enum constants.
Common situations: Round-tripping binding definitions through settings or serialization; dynamic UI builders driven by user-selected numeric values.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- InvalidEnumArgumentException("value", (int) value…
- category
- InvalidEnumArgumentException: routingStrategy
- Specified InkCanvasClipboardFormat is not valid.
- SR.Image_SizeOptionsAngle
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/0d9f4a62863570eb.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/Binding.cs:391
get
{
switch (GetFlagsWithinMask(BindingFlags.UpdateMask))
{
case BindingFlags.UpdateOnPropertyChanged: return UpdateSourceTrigger.PropertyChanged;
case BindingFlags.UpdateOnLostFocus: return UpdateSourceTrigger.LostFocus;
case BindingFlags.UpdateExplicitly: return UpdateSourceTrigger.Explicit;
case BindingFlags.UpdateDefault: return UpdateSourceTrigger.Default;
}
Invariant.Assert(false, "Unexpected UpdateSourceTrigger value");
return 0;
}
set
{
CheckSealed();
BindingFlags flags = FlagsFrom(value);
if (flags == BindingFlags.IllegalInput)
throw new InvalidEnumArgumentException("value", (int) value, typeof(UpdateSourceTrigger));
ChangeFlagsWithinMask(BindingFlags.UpdateMask, flags);
}
}
/// <summary> Raise SourceUpdated event whenever a value flows from target to source </summary>
[DefaultValue(false)]
public bool NotifyOnSourceUpdated
{
get
{
return TestFlag(BindingFlags.NotifyOnSourceUpdated);
}
set
{
bool currentValue = TestFlag(BindingFlags.NotifyOnSourceUpdated);
if (currentValue != value)
{View on GitHub (pinned to 81131a70a4)