{"record":{"id":"757f2763d334794e","repo":"PrismLibrary/Prism","slug":"resources-navigationmodenotavailable","errorCode":null,"errorMessage":"Resources.NavigationModeNotAvailable","messagePattern":"Resources\\.NavigationModeNotAvailable","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Maui/Prism.Maui/Navigation/NavigationParametersExtensions.cs","lineNumber":13,"sourceCode":"﻿using Prism.Properties;\n\nnamespace Prism.Navigation;\n\npublic static class NavigationParametersExtensions\n{\n    public static NavigationMode GetNavigationMode(this INavigationParameters parameters)\n    {\n        var internalParams = (INavigationParametersInternal)parameters;\n        if (internalParams.ContainsKey(KnownInternalParameters.NavigationMode))\n            return internalParams.GetValue<NavigationMode>(KnownInternalParameters.NavigationMode);\n\n        throw new System.ArgumentNullException(Resources.NavigationModeNotAvailable);\n    }\n\n    internal static INavigationParametersInternal GetNavigationParametersInternal(this INavigationParameters parameters)\n    {\n        return (INavigationParametersInternal)parameters;\n    }\n}\n","sourceCodeStart":1,"sourceCodeEnd":21,"githubUrl":"https://github.com/PrismLibrary/Prism/blob/358118cd640d9a22ff8cf21c8ad197fa038b7990/src/Maui/Prism.Maui/Navigation/NavigationParametersExtensions.cs#L1-L21","documentation":"GetNavigationMode reads the NavigationMode value from the internal navigation parameters. If the NavigationMode key has never been added to the parameters (i.e. this extension is called outside of an actual Prism navigation operation), the method throws ArgumentNullException wrapping the Resources.NavigationModeNotAvailable message. The library throws it because NavigationMode is an internal bookkeeping value only present during real navigation calls.","triggerScenarios":"Calling parameters.GetNavigationMode() on INavigationParameters that were created manually (new NavigationParameters()) or received outside a Prism-driven navigation (e.g. in OnNavigatedFrom on pages pushed by raw Xamarin/Maui Shell navigation, or in unit tests constructing parameters by hand).","commonSituations":"Developers inspecting navigation mode in ViewModel lifecycle hooks when the page was created without Prism's navigation service; testing ViewModels with hand-built NavigationParameters; calling the extension in OnNavigatingTo for the very first page created by the app container rather than a navigation call.","solutions":["Only call GetNavigationMode when the parameters actually came from a Prism navigation (INavigationAware hooks during NavigateAsync/GoBackAsync).","Check internalParams.ContainsKey(KnownInternalParameters.NavigationMode) (or use TryGetValue) before reading the value.","In tests, seed the parameters with the internal key: parameters.Add(KnownInternalParameters.NavigationMode, NavigationMode.New) via INavigationParametersInternal.","For the root/initial page, treat missing mode as NavigationMode.New instead of throwing."],"exampleFix":"// before\nvar mode = parameters.GetNavigationMode();\n// after\nvar internalParams = (INavigationParametersInternal)parameters;\nvar mode = internalParams.ContainsKey(KnownInternalParameters.NavigationMode)\n    ? internalParams.GetValue<NavigationMode>(KnownInternalParameters.NavigationMode)\n    : NavigationMode.New;","handlingStrategy":"type-guard","validationCode":"var internalParams = (INavigationParametersInternal)parameters;\nif (!internalParams.ContainsKey(KnownInternalParameters.NavigationMode))\n    return; // or default to NavigationMode.New","typeGuard":"bool TryGetNavigationMode(INavigationParameters p, out NavigationMode mode)\n{\n    var i = (INavigationParametersInternal)p;\n    if (i.ContainsKey(KnownInternalParameters.NavigationMode))\n    { mode = i.GetValue<NavigationMode>(KnownInternalParameters.NavigationMode); return true; }\n    mode = default; return false;\n}","tryCatchPattern":"try { var mode = parameters.GetNavigationMode(); }\ncatch (ArgumentNullException) { /* outside a Prism navigation; use default mode */ }","preventionTips":["Only call GetNavigationMode inside INavigationAware hooks triggered by Prism navigation calls","Seed NavigationParameters in tests with the internal NavigationMode key","Treat the root page (no navigation) as NavigationMode.New by default"],"tags":["navigation","prism","argumentnull","xamarin-maui"],"backgroundTag":"null-argument","analyzedSha":"358118cd640d9a22ff8cf21c8ad197fa038b7990","analyzedAt":"2026-09-15T15:00:31.079Z","contentChangedAt":"2026-09-15T15:00:31.079Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}