{"record":{"id":"a4f1c50f19bb04c0","repo":"dotnet/wpf","slug":"sr-nodefaultupdatesourcetrigger","errorCode":null,"errorMessage":"SR.NoDefaultUpdateSourceTrigger","messagePattern":"SR\\.NoDefaultUpdateSourceTrigger","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/FrameworkPropertyMetadata.cs","lineNumber":224,"sourceCode":"        /// <param name=\"defaultValue\">Default value of property</param>\n        /// <param name=\"flags\">Metadata option flags</param>\n        /// <param name=\"propertyChangedCallback\">Called when the property has been changed</param>\n        /// <param name=\"coerceValueCallback\">Called on update of value</param>\n        /// <param name=\"isAnimationProhibited\">Should animation of this property be prohibited?</param>\n        /// <param name=\"defaultUpdateSourceTrigger\">The UpdateSourceTrigger to use for bindings that have UpdateSourceTriger=Default.</param>\n        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]\n        public FrameworkPropertyMetadata(object defaultValue,\n                                         FrameworkPropertyMetadataOptions flags,\n                                         PropertyChangedCallback propertyChangedCallback,\n                                         CoerceValueCallback coerceValueCallback,\n                                         bool isAnimationProhibited,\n                                         UpdateSourceTrigger defaultUpdateSourceTrigger) :\n            base(defaultValue, propertyChangedCallback, coerceValueCallback, isAnimationProhibited)\n        {\n            if (!BindingOperations.IsValidUpdateSourceTrigger(defaultUpdateSourceTrigger))\n                throw new InvalidEnumArgumentException(\"defaultUpdateSourceTrigger\", (int) defaultUpdateSourceTrigger, typeof(UpdateSourceTrigger));\n            if (defaultUpdateSourceTrigger == UpdateSourceTrigger.Default)\n                throw new ArgumentException(SR.NoDefaultUpdateSourceTrigger, nameof(defaultUpdateSourceTrigger));\n\n            TranslateFlags(flags);\n            DefaultUpdateSourceTrigger = defaultUpdateSourceTrigger;\n        }\n\n        private void Initialize()\n        {\n            // FW_DefaultUpdateSourceTriggerEnumBit1        = 0x40000000,\n            // FW_DefaultUpdateSourceTriggerEnumBit2        = 0x80000000,\n            _flags = (MetadataFlags)(((uint)_flags & 0x3FFFFFFF) | ((uint) UpdateSourceTrigger.PropertyChanged) << 30);\n        }\n        \n        private static bool IsFlagSet(FrameworkPropertyMetadataOptions flag, FrameworkPropertyMetadataOptions flags)\n        {\n            return (flags & flag) != 0;\n        }\n\n        private void TranslateFlags(FrameworkPropertyMetadataOptions flags)","sourceCodeStart":206,"sourceCodeEnd":242,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/FrameworkPropertyMetadata.cs#L206-L242","documentation":"The FrameworkPropertyMetadata constructor throws ArgumentException when you pass UpdateSourceTrigger.Default as the defaultUpdateSourceTrigger. 'Default' is a sentinel meaning 'inherit from the metadata', so it is not a valid explicit default for a new metadata instance; the binding engine needs a concrete trigger (PropertyChanged, LostFocus, etc.). An InvalidEnumArgumentException is thrown first if the value is not a defined UpdateSourceTrigger at all.","triggerScenarios":"Calling any FrameworkPropertyMetadata constructor overload that accepts defaultUpdateSourceTrigger with UpdateSourceTrigger.Default, e.g. new FrameworkPropertyMetadata(value, flags, callback, coerce, false, UpdateSourceTrigger.Default).","commonSituations":"Developers copying a flags argument list and passing 'Default' thinking it means 'use the WPF default'; refactoring from PropertyMetadata to FrameworkPropertyMetadata while keeping a placeholder enum value; generating dependency property registrations with code templates that default enums to their 0 value (UpdateSourceTrigger.Default == 0).","solutions":["Pass a concrete trigger such as UpdateSourceTrigger.PropertyChanged or UpdateSourceTrigger.LostFocus instead of UpdateSourceTrigger.Default.","If you want the framework default behavior, use a constructor overload without the defaultUpdateSourceTrigger parameter.","Validate the enum value before constructing: if (trigger == UpdateSourceTrigger.Default) throw/fix before calling."],"exampleFix":"// before\nvar meta = new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnChanged, null, false, UpdateSourceTrigger.Default);\n// after\nvar meta = new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnChanged, null, false, UpdateSourceTrigger.PropertyChanged);","handlingStrategy":"validation","validationCode":"if (!Enum.IsDefined(typeof(UpdateSourceTrigger), trigger) || trigger == UpdateSourceTrigger.Default)\n    throw new ArgumentOutOfRangeException(nameof(trigger), trigger, \"Must be a concrete UpdateSourceTrigger (not Default).\");","typeGuard":"static bool IsConcreteTrigger(UpdateSourceTrigger t) => t == UpdateSourceTrigger.PropertyChanged || t == UpdateSourceTrigger.LostFocus || t == UpdateSourceTrigger.Explicit;","tryCatchPattern":null,"preventionTips":["Never pass UpdateSourceTrigger.Default explicitly to FrameworkPropertyMetadata constructors.","Use constructor overloads without the trigger parameter when framework defaults are desired.","Centralize dependency-property metadata construction in one helper that validates options."],"tags":["wpf","dependency-properties","invalid-argument"],"backgroundTag":"invalid-argument-value","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"}