PrismLibrary Prism Versions Save

Prism is a framework for building loosely coupled, maintainable, and testable XAML applications in WPF, Xamarin Forms, and Uno / Win UI Applications..

v7.2.0.1347-pre

4 years ago

Changes:

  • d9c170f19947794d7a3229a8769529322a297d3a adding assembly outputs
  • 9221073ee4ee6f61099274583f447c12c4d41e72 remove working directory
  • 941897f5f8222a9f3708d7dc1b4b1cff78592c10 Merge pull request #1829 from PrismLibrary/modal
  • 2cfed956b0254b4565f9d48df0c3821e350ad31b fixing GitHub release
  • 869539670bb02e4aaf55badfa2dcfbb6a9d32dff fixing tests for unregistered View
  • 7b0e1a40d0b4d6686949aabb75b37583d6a0177c Enhance Modal & Exception handling. fixes #1822
  • f4ff48207aeb21cdf08358e14f577f54eb66af04 adding SelectTabExtension
  • 38564120c4de089ca7761f35b3a3e20b5527f3e0 fixing returned value
  • 355e130c052c9b9c534df94e8169c9c2f2901de7 remove unnecessary references
  • b885ff5f338db41cbde1002fb17211c58adefa86 Merge pull request #1825 from PrismLibrary/dialogservice
See more
  • a2b2d3477f15f3a13aafbc079f7048fe1d407882 Unify Xaml Parameters for Dialogs and Navigation
  • 6596ebfe0915c997e923c4cc0da225fdd65ef36d adding ParameterBase
  • 40484847b9414a29eda83ed6ef66da4344904a0e removing dependency on NavigationParameter
  • e811939cb09730578bc962b88ad8693691cd1df2 add ItemsSource
  • 6fb6998fcf41d5b905b07a249405c39f3259fe38 OnNavigatingTo
  • 75d6db5c774f1177c92a0ced6c960930ed74b98f Refactoring for better code sharing between Navigation and Dialog Parameters
  • fe5847b505f653174d6b1a7fdd9cd029bea1e2ef downgrade to Xamarin.Forms 3.6 for added compatibility
  • f76990baff9b868ce0f5ab8bdcab481e4b4e6012 Merge pull request #1828 from PrismLibrary/core3-directorymodulecatalog
  • 192735c5284c65ae0752fd645f1d360dc823bf2e Update DirectoryModuleCatalog.Core.cs
  • 906583a04078abc410a089180bd97797130ac59e add outputs for NavigationInterfaces
  • d301c7d23a431e7fbf3019003cd1de4357bd7dc2 reset IsDialogHost property
  • 24e54a163564dc0dcefc01e227b9cc3c1d60729c add ability to provide custom mask (i.e. gradient layer)
  • 1a49f73f63d0911d80a037c7a1ece92f9aef1860 fixing background tap dismissal
  • c20beae64a963fcb5b1679cf32e715bb7e86511f adding DialogService fixes #1814
  • b4fb6c1a7988f75fb63bdb81a05c5e3270b44713 Merge pull request #1827 from PrismLibrary/xamlnav
  • 8422312573701a9b3b3344e1ae599d63890c894d Fully support bindings for Xaml Navigation fixes #1754
  • aee7c10fdcd4bbb130da1373b5ca332867cb99b4 Merge pull request #1826 from PrismLibrary/dialog-service-updates
  • f124ac52853a724e42d0d0630ce2ace236357f4a Update azure-pipelines.yml
  • 33585f7d6bc7987f144ca55b9a568d8b16b37e33 updated piplines
  • f288e18f83edb4a63b1a4d1a01027dda050da4e8 removed setter from title
  • 6f599469758991e758e6435ea437edf00b69f271 Using Enum for Result
  • 1cc5f34134c2e8566358c55105d2e23d7e2eb8be Merge branch 'master' into core3-directorymodulecatalog
  • 428df870959a20c71f68f602e86f7e9eefc2db70 Merge pull request #1815 from hronlukas/master
  • 4551d9cbe887f936a947b22ca7a0f752c4b0bbeb Merge pull request #1817 from mcavigelli/documentation-fixes
  • cb41ff29c83eb30f10f88ca07b93c22dd18b8777 update deprecated build property
  • 5547afc49d4f027d11db3375d641209df860fede disable Forms Sandbox
  • 56994a430a1f8e859c2fc9d3fa8058c62f8dbe21 update Build Badges
  • d4a74060b42a7e145a2a8204887aaa2972b13d4b ensure global.json is in Sandbox directory
  • 6eda8794585c128511512ca71896544dc0a45fb9 fixing sandbox build options
  • 80b0aafab2c660df684ae580cf50750eb4dbe7c9 fixing job name
  • a1a0df668780aa61befd4ad8ff352341426f7307 consolidating Xamarin.Forms dependency
  • 59a0fa484563b80486758f01ece189b99591dc29 Removed unused usings.
  • 581e9d3ab79ac73d1b86a62d6e80e277bf54b443 Tiny documentation fix.
  • c0369534b7022c0aac543f5a62cbb6550496cb46 Typo
  • c4fa2f05e4ff6e388638a6e8b340d2d8d7051ef6 Do not override owner in DialogService
  • 15588d0bbc7d6f0f236728de7b5365594a659865 update issue templates
  • fdf163566601057f6d3c2c47b08f462de62fec48 Update SourceLink
  • 4f166f542b21ae8b989429392e2650debffcac09 update for Multi-Stage Pipeline
  • 4e335f8f0f726730fe2afbfa575cbf42a82768ec removed RegionManager from dialogservice
  • 3367c5a6d7d8e523094a863345d8381ff2b27be1 update readme plugins and training
  • f426e115554208cdac7709cdbb2e8a8a8ea8a3dc add AutoRegistrationViewNameProvider
  • da1fe79f2a30266cd296fa12302a3ba890ec70c6 Merge pull request #1808 from PrismLibrary/dryioc-ios
  • 418b52ac391f34ebbe12ef772ddcfed57bd46e77 fixes #1806
  • 81ea86c8b6498e8363035a294ee550bd9e2d08eb remove RegisterForNavigationAttribute provide handler for allowing custom logic on AutoRegistering Views
  • 792bd65a08abe7e47a41555bd2259e1828378409 Dependency updates
  • eccb6e31ab19a4f96bd8e826e72cdac64a05c46e Merge pull request #1793 from hermestobias/master
  • 381d56cc4762bd1511364ac742f561370aee7410 Merge pull request #1807 from PrismLibrary/IDialogService-Updates
  • 7f5b2e12945e90a0afc304b489cbfcde0cdcd1c0 attached RegionManager to dialog by default
  • 805eca4e63eefbf42f6b8cb1e2ca4d683f5f7966 working on .NET Core 3 module catalog
  • 0b589ce5f1cd065dc096e7d38add883a731fda3d Merge pull request #1803 from noufionline/patch-2
  • 7c0e303a83ca9f3df0c125570c100520a6a9e4d6 Update IDialogService.cs
  • ff9641a387d2e781bf132b86d5f39c8b437dd4b6 Merge pull request #1798 from PrismLibrary/unity-upgrade
  • d2949123ee37491991df0f47f0be3fde90a5abf8 updated Prism.Forms
  • c794528d133825ae30ec3998e8c4de5d4433d277 updated Prism.WPF to altest version of Unity
  • 2aa53df037191367eeee77bd2bd7b6f2039259f3 Adhere to code style guidelines
  • 886ffcff25fda9d8b7c65cac8d2db24d1522e19b Optimize WeakDelegateReference by introducing TargetEquals, which takes 60% less time than comparing with Target if it's still alive, and makes WeakDelegate.RemoveListener take 90% less time in normal usage.
  • d5569a547c9ad4c74c68673c1955a876bc83dfdb Merge pull request #1780 from PrismLibrary/automatic-registration
  • 5c11a75876ba6409d6454a0af21570a82966a6dd rename registration attribute to align with the AutoLoad API as AutoRegisterForNavigation
  • ae667e78a4e635dfd306b6170defde75c0b69c59 Merge pull request #1779 from PrismLibrary/IInitialize
  • d654987ff388fce0837af5af950a2dd95298f2eb update from OnInitialized -> Initialize
  • 3c175abc927deec680b3cc5ab6e3af38774a3059 Updating DryIoc, Xamarin Forms & Test SDK
  • 170307ef1a28d0e37dea9094af3fd081d7f3c737 Adds support for View Registration by Attribute or automatic View Registration.
  • 2dbdd048824bb2b27b28577fc2ae5e5794cbc4a0 Implementing IInitialize fixes #1746 fixes #1748
  • eb492826d9e2df4153bade87edf37529bf5813a3 migrate Navigation back to Prism Forms
  • a1d383dd4cbe7000defb420a2ac9b61bac8007b5 Merge pull request #1761 from PrismLibrary/IDialogService-Updates
  • b5a43fdb00513ed8ded87b12392b04a4a4bbcddf fixed ninject project
  • c95d6cfc4ebb57f68bbe4d3b51848c7b50e84046 Refactored DialogWindow attached properties
  • 2507daf9e30df838d0d6d3443f1ac47befc529e8 Merge pull request #1749 from PrismLibrary/IDialogService-Updates
  • 273eab2757314eb476b3a871ae3edb7fa8bb3565 Merge branch 'master' into IDialogService-Updates
  • 36f8d810333259765f94f98bebd1a3ff335f78d9 removed dialog VM base class
  • 6d23d45b2e7689a7475ec1d7377e17405b526e73 removing UWP
  • 96235961e94fa4238d11c8e9a8a786fa9680b39b Merge pull request #1731 from bartlannoeye/Cleanup
  • b6c9ab6abf9a70349d000a823ee2e4b18a90648e Cleanup project files
  • c0d9ed6b9f09d66e67cb6f07332bb182deb2d0e8 Merge pull request #1730 from PrismLibrary/forms36
  • 6e1aa897068d8b4e14b53871c8a873f74c5463e6 removing netstandard1.0
  • c13900425281141fc7048164d441ae8051e089f3 moving Android DependencyResolver to PrismApplicationBase
  • a2bd9975d378cdc7d96d0d0c869c852788d28bb5 updating Xamarin Forms and DryIoc
  • 5111104178da72137f96be8e4d718c8403b7fff5 Merge pull request #1722 from PrismLibrary/IDialogService-Updates
  • e8effd4447104fef2257f5ba076b80c995bdb2f2 removed Icon property
  • 2d68c0f063975affb81cc20393a1a00ba0eb5e65 Merge pull request #1721 from PrismLibrary/IDialogService-Updates
  • a6c8e8441585e268e72f6db78264b21b9325097b added RegisterDialog method without VM requirement
  • 6494cf427b2ce8310ebf30065e9e19e21d802efe added support to control DialogWindow from style
  • 04cc589e23a9c2465dface322e87f9fce6f4b5e3 Merge pull request #1714 from noufionline/patch-2
  • c14d28dc449ba39c326149c4122bec874d39a6b1 Update DialogService.cs
  • d4768773d11afff19bb1ad5a551a3165fa002640 Merge pull request #1709 from PrismLibrary/WPF-IDestructible
  • df7414cea36ae5e1b02e70b5a636d8cf252c0ae1 added support for IDestructible
  • 982d21fb1767de3dce297ffea291bafd3bd77a9b fixing release notes
  • a9e22dfb12ee9c78e5cab9ff4fcad2e40f65bb38 Merge pull request #1705 from PrismLibrary/fluent-containerregistry [ #1677 ]
  • 45f6a187762ac8ec43175e4d38e9a146653e5632 Fluent API for IContainerRegistry fixes #1677
  • a041c7f8b7f8975b5451885378551c6367529bdf Merge pull request #1704 from PrismLibrary/forms-updates
  • cc740341898beb73b825b49e343be8cb73adfa73 update Xamarin.Forms
  • dec906e67d0d6a8c43bf0d030919e3c0ab09ce33 make NavigationExtension bindable
  • 336a405c657684fc4f7303b3cb9df11927e05c0e removing unneeded extensions
  • 779a2908080d95ce64e1af29d528c958ca497de0 Merge pull request #1703 from PrismLibrary/uwp-simplifications
  • f50bcdb5ffe2401cdc0f011f62a877c07d844443 PrismApplication simplification
  • 2109273bf31eb6d9eccb24b6d9db8e95286faf88 Merge pull request #1702 from PrismLibrary/PlatformSpecificViewRegistration
  • c8f208f117aa8fd2a4159ba72374baa60448b091 fixes #1700 Platform specific Views not registered
  • 8e22c9f2d290b08f5abba4f490dca2916149cd7d Adding tests for Idiom and Platform specific View registrations
  • 508b5c816815a9a24748ff694407c0ec4a36030a Merge pull request #1685 from PrismLibrary/uwp-di
  • 9aaec2f6c1bba6aeadacd78057485fcdd98ab3e1 Merge pull request #1684 from bares43/feature/XamlNavigationAnimated
  • fac1d292a236e84a47a1fc3fbc46a969aadc4c2b FrameFacade DI fixes
  • f35fd6562e11debe2b4b4628a1c502209e92d76e fixing naming
  • 2b503a2d578e0d0b5c5eeefa71b316c585f2ce10 updating Sandbox app to follow better MVVM patterns
  • ab1b6ad329669d1125e1b706b9e1e63a9f5b69a7 simplify startup
  • 6e8176904e2b1a04aee7ea40399d7acb7bc67b4f force use of Microsoft.NETCore.UniversalWindowsPlatform 6.1.9 due to 6.2.X being unlisted from NuGet
  • fd2d1d26a1bc295506080c5c79fb67f6b4cc4595 call SetAsWindowContent by default
  • d9d8782b9c73e974da6d2d81285123088350f97d dependency injection refactoring of UWP
  • bc2de7902f474ab939369aca0b3ccafedec4423d adding named service Resolve with parameters
  • 55d5d4519b67ee5c8b04f7eb1f7d3c72203b48c2 xaml nav UseModalNavigation
  • 4caf26b92088fb07c44b8da256fa75099da6cbfb xamarin forms xaml navigation animated
  • 388d7094980bfce89911c7c46694a678fbcfae28 Merge pull request #1682 from PrismLibrary/Interactivity-Improvements
  • 0b64623284d3ed643e26766d75c2ca220b14b953 added close dialog command to DialogViewModelBase
  • 4403abb68c5402135f6b935e5fc7659fb520eedf Merge pull request #1680 from omerfarukz/master
  • 6aa4b17d0f9109cd41820222a482b5958d5216b6 Merge pull request #1681 from PrismLibrary/buildupdates
  • ed97ac336b6fa6119acfe146c6279d36ed46d632 simplify versioning
  • 33c3a4809307eec28bd21fba567644f48421a7e5 use preview1
  • 1571d33d5b76f6833896953ab947f481b833408b package updates
  • 6b05672e604e5bf94aeb0f7bc7a17120bd4a4d4c force use of latest netcore 3 sdk
  • e9136c304f46dfff0cb5bafecfdf73c38c13f5f6 added support for new dialog service to bootstrappers
  • e9e27fb7e1d1b1828559f25bab04654013e2c68d fixing release URL
  • 62c383978119ba318c547b33e8c8f9789d715b64 added obsolete attributes
  • be176285747ad43c279a0dc855600803b3ff0158 did some refactoring
  • ae37468690890bbfa7481317f779c60961e50edf rollback MSBuild.Sdk.Extras
  • fa3eb5fb256fbe9f8002998773e8441414d00d77 update Patreon & Container notices
  • 53de9b5301df3bb2ec05c342f5f23108c9f3a760 simplify build versioning
  • e878056170ee7fb5064755d934709d8ae72f40fd set Release Url as part of build
  • 664b08ce71ce7896d05e511e1d84558363508501 updating build resources
  • 26c1832325e6dcd21fab8a0ca53b2fcd1ef3d509 Changed property observer to use property info instead of property name
  • e7cecd0a84cd83ccab30941551d3ad05523c62b1 Merge pull request #1669 from PrismLibrary/api-enhancements
  • 6506dafd96232bcd45f02698799d4a61b84601cb adding Tuple Navigation
  • 3c1fdb3994e24262cf620360c459b8d53db8645c add Cancel/Destroy buttons that have no action
  • b55b9676602470c6022f119ea130e8a4e92d3967 Merge pull request #1668 from PrismLibrary/iocabstractions
  • a45d5bbf5b801e987e2bcf83792f6d468ab5690f Cleaning up API's
  • 531a9699832d7fae82f5955d0bc1f740186120f8 adding resolve with parameters
  • f7e3624740db9a78dd8022fc96cf9c861971f33e Adding overloads for named instances
  • 5afe1cd82fcabbe3b8db351645ade90ee7ca57fc expands IoC abstractions fixes #1654
  • b9fb480334b8d5bbcfbe600d81dd2804116f1d4c consolidate forms reference
  • 00acd99d947c41b07c0a3f59f575bf8beef49282 package updates
  • 9acdecdd3d62e2206360788c9c2a104f74d4803b playing around with the dialog API
  • 32781cd36f42f059f37bd841ec61e38a0e465ea4 Merge pull request #1665 from muhaym/patch-1
  • e2db76ac0022f1ab455ed59d1cc0b72c3d5dffbb Navigate Async Documentation fix
  • 457c725a3247d2eef627733e2e395908d2b6ac0d initial attempt at a new dialog service
  • 7baeb323dbf1610ed05de21a477291194b0f1eb1 Merge pull request #1663 from PrismLibrary/PlatformNav-Refactor
  • 753fe5a04fc65b1c0d27f0d0b721e14a8d66a25f Refactored platform navigation methods
  • 802ea9f3426673ec00fcf9a25a1ab91ff934ebe1 Merge pull request #1662 from PrismLibrary/EventBase-Revert
  • 57ad662f693cb9877d55046b7552291458bcdd02 Reverted
  • 9399b9dca1b062d749c83a753dbe42f6b0d0b6d2 Merge pull request #1658 from Anapher/master_fixDelegateCommandTypo
  • d627f73204a27fe88aee193c22324145bcbb2b62 Fix typo in documentation of DelegateCommand<T>
  • 7e18e8a915764d1febd830c21b04a8fd790963c8 Merge pull request #1653 from cr1mp/patch-1
  • 1c2393a49d7a6dafe75b3560a1b02c79a55825d4 Update NavigationExtensionBase.cs
  • c33241a17c105d7a1553350251e2ed96c86c34f6 Merge pull request #1651 from PrismLibrary/core3-sdk
  • bf1ee2198613c21540aa7b8a6c6fa78b5aaf32d0 use public preview for .NET Core 3
  • 34e8042b3531c126bc78ea391e9b3f2e051344e2 Merge pull request #1650 from PrismLibrary/build-xf-update
  • db6381072c6bf2fc6efdea064b33984530d053d5 build updates
  • af7f8d8ddbd32ed3c991b46bd98d6941c3550457 adding missing XmlnsDefinition
  • bee0480ec5dbc608506d560ee475338144dd5030 Merge pull request #1643 from PrismLibrary/Bug1638-IModuleCatalog
  • 37c23d9e574a31d8313a9f0c4f74a79c7943498e registered the container extension
  • c9b38d9cd47f603efbe52f2d0adbe621f8e2a830 add XmlnsDefinition
  • df68a49c2868d447691e72f7eed4ecb9cb3d5809 update Unity & SourceLink
  • 136bb1e950c5e73074e679ce86d22b6f2af6b7eb Merge pull request #1630 from MikelThief/master
  • eba378f2356db80de134e78cf2bb91222865b21f Fixing view discovery for Unity for UWP
  • dff0050252b6facee4d183750bbdfdf6de14b2a1 Fixing view discovery for DryIoc for UWP
  • fd8cf682c14715071dee843eab5bb1755f7d1ec9 updated WPF projects to build 9754 of core 3
  • 930e2b062eba7dcf38fc4aed603376ff06f15f44 fixed #1625
  • 21cf0847dbe59b503a4a2ac0ac457bdedff9797b Merge pull request #1617 from PrismLibrary/tabbednavigation
  • b0ad436485f8b840c35e6b73a750cc7a8b25faa6 eliminate poptoroot
  • 0f337f1d14874707f188db308049d9b85b5a271a refactoring Tab Navigation to be consistent with other Navigation API's
  • 40febb8ddebb77e05ab3be3f4374f2e5db11a6b3 Merge pull request #1616 from PrismLibrary/TabSwitching
  • 2ee14f2efeab916ea15e449dd14a6072b9e5f17d added SelectTab extension method for tabbedpages
  • 086759d4bc5b44f8a89ab7e2e0d6ca39c0f0c36d Merge pull request #1609 from PrismLibrary/netcore3-support
  • 871ca509e37d2f82c34ee212b6cefa08db388003 rerun failed tests
  • de6ad678bf08172a3e147f10e3e8f19cecb402dd update authors
  • 9b643d96254332ada8940c164b8ba348bd9fb4c7 install latest .netcore 3 sdk
  • 8600c4d7134f466c4f8ceffe77c0c2ff07213b99 added .NET Core 3 support
  • dc2ad6e0107efc91b6078da3db6fbbf9843b7da9 updated DryIoc tests
  • b00db5550ddccfed87e846da0576d1d87547bee3 Merge pull request #1607 from PrismLibrary/versionbump
  • b4d2d184c876731847463eb2a8549b2369be2657 ignore tests for deprecated Container
  • c6e399efb5ba699e1c61a3f6105a696d76b53b05 bump for Prism 7.2
  • e3f65692b077c9ad900adc73e12e8e50c3bde237 removing Autofac
  • 0197d31be185b2cc89e0b87e8aaed54dcbee5821 Merge pull request #1606 from PrismLibrary/upgrade-tests
  • 2a5e4e6f089c50782ba57a015a6f0e30c6910c13 added debug directive to test
  • cfa7c7c35527afb5031939fb1b750fd2dec3e113 updated xamarin tests
  • a58bdbba366268c9b7affa8c9f7e773aceeef01c fixed service locator tests
  • 76ea1b67867ead423891238270544f41c6a61a07 updating more tests
  • 2b3c91f51286bfc4cc716077a01faa3ab4430828 fixed all compile errors
  • 9e283c195388123a1477c51ca5545ed9b442cf22 Merge pull request #1604 from bartlannoeye/master
  • 1f5a0fe459940e4b6d36183ba61980ead073707e Revert unstable install SDK script
  • fae52362884f7c88a3702cc3a13130c41f553b90 Merge pull request #1602 from dro123/master [ #1601 ]
  • dfcf1e1ab4cb2f8bc5aac1ed1d707b7c7d830752 Always call InitializeModules() in PrismApplicationBase even without a shell (#1601)
  • 7b6b45382af449ffddf249d098053cf2cc02bcc7 Don't crash in PrismApplicationBase.OnInitialized() if MainWindow is null
  • 84d21aaf1264cba106c8d7ea65c25bde44d46910 Merge pull request #1600 from bartlannoeye/AzureDevOps4UWP
  • 7d088c5ce240b803b676bf1a517e862081ed5a11 One letter too much
  • f364c2b2ac53f79e1b72cde6b65134b7f78ec831 Rename install-uwp-sdk_yml.yaml to install-uwp-sdk.yaml
  • 7c85432ef23604142c18fe75b5e61d0277bfc4d6 Moved step yaml file in correct folder
  • b07cdf5c49a0edbe3db477ddc90c91eeb3f026bc Call installing UWP SDK, remove devops trigger
  • 197898d7f1e6875afc32b5e4f6892f21326f9628 Add the Install Windows SDK powershell script
  • c4711a4462c5bd3da6223cb1968f246402de1e57 Merge pull request #1597 from bartlannoeye/UWPv7
  • 5521a0c58859624bec5a3085154d6ebddb9cce7d Corrected default namespace for Prism.Unity.Windows
  • be5c45a55d0931f4fdf0837255ee89212cdee582 Removed unused usings in UWP libraries
  • 09c4c3241a78b789c1ab017bb318e9a2246ba922 Merge pull request #1594 from Windows-XAML/master
  • 3725fdaa292305413dd5e405bcf9a62107812709 Allowing for Fluent if they want it.
  • 8314c7f8bc1fde478098cc4978efb8a7b611a5d3 Accepting update
  • 97ec752635977c5f1bfe1aff9340de597615d2f1 Correcting incorrect return type.
  • 7c2f7a4a5318b669afd8372e48f1de4b609c8db6 Correcting incorrect return type.
  • fbb32f5a97cd111017fa5e31dc150f88e75d6835 Merge pull request #1592 from PrismLibrary/Issue-1589 [ #1589 ]
  • 444bc5d9c4a3181afdbf0ef48634e2ab95d3108d fixed #1589
  • bb7365c101243a3aba8b3b0879c663fc9ec2faf3 Merge pull request #1587 from Seikilos/patch-1
  • 5c4e6ae362bceaf4b2441d3446a9218e6c509d88 Fixed myget urls
  • ab96ab83ad9c470934e0eb8c1fa625b9687020cb Merge pull request #1563 from Windows-XAML/master
  • f555463dd244d0e84f712e49db54e52dd68cfe58 Returning the internface in Core, but enabling Remove() in Windows.
  • ffe20a3763ca0a4ad76ca62724c73e54068c1fc1 Removing ViewModelBase, I can add it to Template10.Extras
  • db3f4c1d478ce24c38e910b100074e866c38bf68 We're now caching the Frame.CurrentParameters in the FrameFacade so that when the user Refereshes, the operation has a reference to the parameter.
  • 5453d905ea8aaf96ba77e227b2da4ae1eadf4856 The Gestures enum is/was redundant to the Gesture enum.
  • 5d78bb4e0ad63402ae80827d1002229008b48f73 Merge branch 'master' of https://github.com/Windows-XAML/Prism into cherry-branch
  • 2dce50bd0ace1726fb18d4ae4c1a8dd080ab98be Merge pull request #1 from PrismLibrary/master
  • 32fcbdde3fb56def64077b5216ae486374093126 Adding some extra logging after SetAutowireViewModel();

This list of changes was auto generated.

v7.2.0.1233-pre-pre

5 years ago

This is the 3rd public preview for Prism 7.2.

This preview provides a number of bug fixes and enhancements.

Prism Core

  • #1668: Expands IoC abstractions to allow checking for registered services and naming instances or singletons.
  • #1680: Fixes Ambiguous match when using DelegateCommand.ObserveProperty
  • #1677: Changes IContainerRegistry to provide a Fluent API

Prism.WPF

  • #1296: Support for IDestructilbe in WPF projects
  • #1544: .Net Core 3 Support
  • #1601: InitializeModules() should be called even if there's no shell
  • #1676: Ambiguous match found when ObserveProperty
  • #1666: A New IDialogService for WPF

A New IDialogService for WPF

Currently, the only way to show any type of dialog with Prism is by using the PopupWindowAction in combination with System.Windows.Interactivity. To be honest, I really dislike this approach. It's over complex, highly verbose, difficult to implement, and is very limited. The limitations are covered pretty well in Issue #864

Instead, I created a new IDialogService API that will replace the PopupWindowAction altogether. This service will allow developers to show any dialog they want either modal, or non-modal, and have complete control over their dialog logic.

The implementation looks like this:

    public interface IDialogService
    {
        void Show(string name, IDialogParameters parameters, Action<IDialogResult> callback);
        void ShowDialog(string name, IDialogParameters parameters, Action<IDialogResult> callback);
    }

The idea here is that Prism will no longer provide any built-in dialogs like Notification or Confirmation. Mainly because the Prism implementations are UGLY and will never match the styling of your beautiful WPF application. So, it's important that you are able to register your own dialogs.

Create Your Dialog View

Your dialog view is a simple UserContro l that can be designed anyway you please. The only requirement it has a ViewModel that implements IDialogAware set as it's DataContext. Preferably, it will utilize the ViewModelLocator

<UserControl x:Class="HelloWorld.Dialogs.NotificationDialog"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"
             prism:ViewModelLocator.AutoWireViewModel="True"
             Width="300" Height="150">
    <Grid x:Name="LayoutRoot" Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <TextBlock Text="{Binding Message}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" TextWrapping="Wrap" />
        <Button Command="{Binding CloseDialogCommand}" CommandPrameter="true" Content="OK" Width="75" Height="25" HorizontalAlignment="Right" Margin="0,10,0,0" Grid.Row="1" IsDefault="True" />
    </Grid>
</UserControl>

Create Your Dialog ViewModel

Next you need a ViewModel that implements IDialogAware which is defined as follows

    public interface IDialogAware
    {
        bool CanCloseDialog();
        void OnDialogClosed();
        void OnDialogOpened(IDialogParameters parameters);
        string Title { get; set; }
        event Action<IDialogResult> RequestClose;
    }

Here is a simple example of what an IDialogAware ViewModel may look like.

    public class NotificationDialogViewModel : BindableBase, IDialogAware
    {
        private DelegateCommand<string> _closeDialogCommand;
        public DelegateCommand<string> CloseDialogCommand =>
            _closeDialogCommand ?? (_closeDialogCommand = new DelegateCommand<string>(CloseDialog));

        private string _message;
        public string Message
        {
            get { return _message; }
            set { SetProperty(ref _message, value); }
        }

        private string _title = "Notification";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        public event Action<IDialogResult> RequestClose;

        protected virtual void CloseDialog(string parameter)
        {
            bool? result = null;

            if (parameter?.ToLower() == "true")
                result = true;
            else if (parameter?.ToLower() == "false")
                result = false;

            RaiseRequestClose(new DialogResult(result));
        }

        public virtual void RaiseRequestClose(IDialogResult dialogResult)
        {
            RequestClose?.Invoke(dialogResult);
        }

        public virtual bool CanCloseDialog()
        {
            return true;
        }

        public virtual void OnDialogClosed()
        {

        }

        public virtual void OnDialogOpened(IDialogParameters parameters)
        {
            Message = parameters.GetValue<string>("message");
        }
    }

Register the Dialog

To register a dialog, you must have a View (UserControl) and a corresponding ViewModel (which must implement IDialogAware). In the RegisterTypes method, simply register your dialog like you would any other service by using the IContainterRegistery.RegisterDialog method.

 protected override void RegisterTypes(IContainerRegistry containerRegistry)
 {
     containerRegistry.RegisterDialog<NotificationDialog, NotificationDialogViewModel>();
 }

Using the Dialog Service

To use the dialog service you simply ask for the service in your VM ctor.

public MainWindowViewModel(IDialogService dialogService)
{
    _dialogService = dialogService;
}

Then call either Show or ShowDialog providing the name of the dialog, any parameters your dialogs requires, and then handle the result via a call back

private void ShowDialog()
{
    var message = "This is a message that should be shown in the dialog.";
    //using the dialog service as-is
    _dialogService.ShowDialog("NotificationDialog", new DialogParameters($"message={message}"), r =>
    {
        if (!r.Result.HasValue)
            Title = "Result is null";
        else if (r.Result == true)
            Title = "Result is True";
        else if (r.Result == false)
            Title = "Result is False";
        else
            Title = "What the hell did you do?";
    });
}

Simplify your Application Dialog APIs

The intent of the dialog API is not to try and guess exactly what type of parameters your need for all of your dialogs, but rather to just create and show the dialogs. To simplify common dialogs in your application the guidance will be to create an extension methods to simplify your applications dialogs.

For example:

public static class DialogServiceEstensions
{
    public static void ShowNotification(this IDialogService dialogService, string message, Action<IDialogResult> callBack)
    {
        dialogService.ShowDialog("NotificationDialog", new DialogParameters($"message={message}"), callBack);
    }
}

Then to call your Notifications use the new and improved API that you created specifically for your app.

    _dialogService.ShowNotification(message, r =>
    {
        if (!r.Result.HasValue)
            Title = "Result is null";
        else if (r.Result == true)
            Title = "Result is True";
        else if (r.Result == false)
            Title = "Result is False";
        else
            Title = "What the hell did you do?";
    });

Register a Custom Dialog Window

It's very common to be using a third-party control vendor such as Infragistics. In these cases, you may want to replace the standard WPF Window control that hosts the dialogs with a custom Window class such as the Infragistics XamRibbonWindow control.

In this case, just create your custom Window, and implement the IDialogWindow interface:

public partial class MyRibbonWindow: XamRibbonWindow, IDialogWindow
{
    public IDialogResult Result { get; set; }
    ….
}

Then register your dialog window with the IContainerRegistry.

 protected override void RegisterTypes(IContainerRegistry containerRegistry)
 {
     containerRegistry.RegisterDialogWindow<MyRibbonWindow>();
 }

Style the DailogWindow

You can control the properties of the DialogWindow by using a style via an attatched property on the Dialog UserControl

    <prism:Dialog.WindowStyle>
        <Style TargetType="Window">
            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
            <Setter Property="ResizeMode" Value="NoResize"/>
            <Setter Property="ShowInTaskbar" Value="False"/>
            <Setter Property="SizeToContent" Value="WidthAndHeight"/>
        </Style>
    </prism:Dialog.WindowStyle>

To clarify, this is to replace the PopupWindowAction. I want to remove that mess completely from Prism

Prism.Forms

  • #1589: OnNavigatedFrom method is not called when changing detail on MasterDetailPage
  • #1615: Add the ability to switch tabs
  • #1625: Master Detail to Tab Page Navigation broken in 7.1
  • #1683: Add navigation animation or modal navigation with XAML Navigation Extensions
  • #1663: Refactored platform navigation methods
  • #1669: Allow Create/Destroy Action Sheet buttons with only a name. Allow passing tuples to Navigation Service
  • #1700: Platform Specific View Registration not respected
  • #1704: Make XAML Navigation Extensions inherit from BindableObject. Make properties Bindable
  • #1748: [BREAKING] Make INavigatingAware Obsolete and introduce IInitialize, IInitializeAsync & IAutoInitialize
  • #1757: Add Automatic View Registration

View/ViewModel Initialization

After numerous user survey's and interviews it became apparent that the intent of INavigatingAware had been become unclear and that users were actually overwhelmingly asking for a breaking change. INavigatingAware is no longer supported. For those who may be using OnNavigatingTo with INavigationAware this will be most impactful as a behavior change as INavigatingAware has been removed from INavigationAware meaning that it will no longer be called. For those who have implemented INavigatingAware directly you will see a build error. The impact should be minimal by simply renaming all instances of INavigatingAware to Initialize.

Using IAutoInitialize

IAutoInitialize is designed for those cases where you are passing objects around. By default we do a Non-Case-Sensitive lookup between the Navigation Parameters and the Properties in your ViewModel. If one is found we will automatically try to set the property for you.

_navigationService.NavigateAsync("ViewB" ("title", "Hello World"), ("fooBar", "some other value"));

public class ViewBViewModel : IAutoInitialize
{
    public string Title { get; set; }
    public string FooBar { get; set; }
}

In the above example your ViewModel will be initialized with the values passed in the NavigationParameters. If these are static variables (meaning the won't change during the lifecycle of your View/ViewModel you would not need to implement INotifyPropertyChanged for them.

public class ViewBViewModel
{
    [NavigationParameter(true)
    public string Title { get; set; }

    [NavigationParameter("fooBar")
    public string Foo { get; set; }
}

In this example you'll notice that we have some slight variations where we have added NavigationParameter attributes. The attributes allow you to decorate your properties to make them Required or specify a different name that you will use in your NavigationParameters. Note that if you make a property Required and you fail to pass the parameter this will throw an Exception that you will need to check for in the NavigationResult.

Automatic View Registration

Automatic Registration can be used for either an Application or Module. Note that there is an optional Automatic property. When Automatic is set to true Prism will not look for any attributes but will simply look for any contained types that are a Page type. If there is a Page type it will automatically be registered.

[AutoRegisterForNavigation]
public class App : PrismApplication
{
}

[AutoRegisterForNavigation(Automatic = true)]
public class AwesomeModule : Imodule
{
}

In the above example when the App is initializing Prism will reflect on the assembly of the App to look for any RegisterForNavigation Attributes first at an assembly level and then at a page level.

[assembly: RegisterForNavigation(ViewType = typeof(ViewA))]
[assembly: RegisterForNavigation(ViewType = typeof(ViewB), Name = "viewB")]
[assembly: RegisterForNavigation(ViewType = typeof(ViewC), Name = "platformSpecific", RuntimePlatform = RuntimePlatform.Android)]
[assembly: RegisterForNavigation(ViewType = typeof(ViewD), Name = "platformSpecific", RuntimePlatform = RuntimePlatform.iOS)]

// OR

// Registered as ViewA
[RegisterForNavigation]
public class ViewA : ContentPage { }

[RegisterForNavigation(Name = "viewB")]
public class ViewB : ContentPage { }

// Ignored if no attribute exists unless Automatic Registration was enabled
public class ViewB : ContentPage { }

// Only Registered on iOS
[RegisterForNavigation(RuntimePlatform = RuntimePlatform.iOS)]
public class ViewD : ContentPage { }

v7.2.0.1038-pre

5 years ago

General Notes

This is the 2nd public preview for Prism 7.2, and the 1st public preview of the new Prism for UWP (aka Prism.Windows). Note that the UWP API's may still be in flux prior to release.

This preview provides a number of bug fixes and enhancements.

#Prism Core

  • #1348: Navigation Alignment - moved all navigation interfaces into Prism Core (currently hidden from WPF)
  • #1476: Module Alignment - moved Exceptions, ModuleInfo, and several Modularity interfaces to Prism.Core from WPF combining with some Prism.Forms definitions.
  • IModuleManager.ModuleDownloadProgressChanged (available in net45 aka WPF ONLY)
  • #1505: Memory problem with EventAggregator and never published message
  • #1509: Module Alignment Updates: Introduce IModuleInfo
  • #1511: Module Alignment
  • All modularity interfaces and base & supporting types moved to Prism.Core
  • IContainerRegistry now has a Fluent API. All registration methods now return IContainerRegistry to allow chaining registrations.
  • IContainerRegistry has expanded API's to help with additional scenarios where you might need a named type.
  • IContainerProvider has expanded API's to help resolve Types with specific instances that may be needed for resolution.
  • (Forms and UWP) INavigationService now has extension methods to support the use of Tuples for NavigationParameters eliminating the need to specifically create new NavigationParameters when Navigating.

Prism.WPF

  • #1544: .Net Core 3 Support
  • #1601: InitializeModules() should be called even if there's no shell
  • #1676: Ambiguous match found when ObserveProperty
  • #1666: A New IDialogService for WPF
  • Introduces a new IDialogService that will replace the PopupWindowAction altogether. This service will allow developers to show any dialog they want either modal, or non-modal, and have complete control over their dialog logic.

Prism.Forms

  • #1589: OnNavigatedFrom method is not called when changing detail on MasterDetailPage
  • #1615: Add the ability to switch tabs
  • #1625: Master Detail to Tab Page Navigation broken in 7.1
  • #1683: Xaml navigation without animation isn't working
  • XAML Navigation Extensions are now Bindable. Among the benefits includes that when coupled with the new BindableLayout in Xamarin.Forms you could use this to build dynamic Menu's in XAML
  • XAML Navigation now allows you to specify whether the Navigation should be Animated or Use Modal Navigation
  • Fixed registration of Views by Platform
  • Changed target Xamarin.Forms version from 4.0-pre1 to 3.5 SR1

v7.2.0.708-pre

5 years ago

Special Release

This is a special preview for Microsoft Connect.

Prism.WPF

  • #1544: .Net Core 3 Support
  • #1601: InitializeModules() should be called even if there's no shell

Prism.Forms

  • #1589: OnNavigatedFrom method is not called when changing detail on MasterDetailPage
  • #1615: Add the ability to switch tabs
  • #1625: Master Detail to Tab Page Navigation broken in 7.1
  • Support for Xamarin Forms developers using 4.0 pre1 to use the new Prism namespace to access all vital Prism types from XAML
<ContentPage xmlns:prism="http://prismlibrary.com">
  <ListView>
    <ListView.Behaviors>
      <prism:EventToCommandBehavior ... />
    </ListView.Behaviors>
  </ListView>
</ContentPage>

Prism.Windows

  • New guidance - Merged with Template 10

v7.1.0

5 years ago

General Notes

In addition to the typical bug fixes Prism 7.1 brings a much more consolidated approach to developing applications. Perhaps this is most clear with Prism.Modularity now being defined entirely in the Prism.Core providing a consistent API for Prism.Forms and Prism.WPF, as well as making it available for the first time to Prism.Windows (in an upcoming preview).

Due to the major changes in where certain types are for Modularity (and Navigation for Prism.Forms), you may experience binary incompatibility issues when using libraries that target older versions of Prism.

Container Notices

Going forward we will only consider support for containers that work properly for Prism. The Prism team advises all developers to update projects to use the new PackageReference, this will help simplify maintaining which packages you need to update by simply targeting the Prism Container package (see Unity notice).

Autofac

After much discussion the Prism team has decided that this will be the final release for Autofac. Modularity is a core capability for Prism, which requires the use of a Mutable container. The fact that the Autofac team has chosen to make Autofac Immutable prevents us from being able to support the use of containers.

MEF

Similarly the Prism team has decided that we will no longer be shipping or supporting MEF for WPF, nor will support be added for any other platforms.

Unity

Unity continues to be a very popular and fully supported container. For those upgrading to Prism 7.1 from Prism 6.X, note that you will need to uninstall the Unity references in your existing projects as the new maintainer for Unity has completely rearchitected the Unity Container. This included changing namespaces and changing how the library was shipped forcing the Prism Team to change the NuGet that we target from Unity to Unity.Container.

Prism.Core

  • #1348: Navigation Alignment - moved all navigation interfaces into Prism Core (currently hidden from WPF)
  • #1476: Module Alignment - moved Exceptions, ModuleInfo, and several Modularity interfaces to Prism.Core from WPF combining with some Prism.Forms definitions.
    • IModuleManager.ModuleDownloadProgressChanged (available in net45 aka WPF ONLY)
  • #1505: Memory problem with EventAggregator and never published message
  • #1509: Module Alignment Updates: Introduce IModuleInfo
  • #1511: Module Alignment
    • All modularity interfaces and base & supporting types moved to Prism.Core

Prism.Forms

  • #1348: Navigation alignment
    • Added INavigationParameters
    • Added INavigationParametersInternal
    • Added INavigationResult
    • Convert all methods using NavigationParameters to use the new INavigationParameters BREAKING
    • Changed Task INavigationService.NavigateAsync to Task<INavigationResult> INavigationService.NavigateAsync
    • Changed Task<bool> INavigationService.GoBackAsync to Task<INavigationResult> INavigationService.GoBackAsync BREAKING
  • #1347: ContainerProvider<T> - Allows Declaring Types in XAML that require the Container to Resolve them
  • #1353: NavigationFrom not called when navigate to different Hamburger Menu Page
  • #1354: INavigationAware methods are not called on children of a CarouselPage
  • #1403: Remove pages from NavigationStack without pushing another one
  • #1414: Changed from Unity NuGet to Unity.Container BREAKING
  • #1425: XAML Navigation
  • #1439: DependencyResolver
  • #1456: Relative back navigation does not work with INavigationParameters
  • #1463: DryIoc Default Rules Change. By default DryIoc will attempt to resolve types based on an available constructor with resolvable types. Secondary registrations will now replace any initial registration by default.
  • #1464: Unity and Autofac no longer require INavigationService to be named navigationService inside of a ViewModel.
  • #1469: Make Xamarin.Forms DependencyResolver Opt-In
  • #1476: Module Alignment BREAKING
    • ModuleInfo.ModuleType has changed from System.Type to System.String and is equal to Type.AssemblyQualifiedName
    • IModuleManager.LoadModuleCompleted - Forms will now invoke this event when a new module has been loaded. Note there is not currently a default handler provided by PrismApplication. This event will contain any caught exception that was thrown while attempting to load a Module.
    • Moved all Modularity interfaces except IModuleCatalog to Prism.Core
  • #1509: Module Alignment
    • Adds IModuleInfo
    • ModuleInfo moved back to Prism.Forms. ModuleInfo will now return Module Dependencies when decorated with the ModuleDependencyAttribute if dependencies are not set at Registration.
  • #1511: Module Alignment - All modularity interfaces and base & supporting types moved to Prism.Core
  • #1519: Support Partial Views in Xamarin Forms
  • #1546: MasterDetailPage navigation on iOS is unexcepted
  • #1549: EventToCommandBehavior.OnEventRaised NullReferenceException

Partial Views

The concept of a Partial View is to support a custom layout which may be reused across multiple pages, and eliminate ViewModel logic duplication by allowing that custom layout to rely on its own ViewModel. To use a Partial View you must set the ViewModelLocator.AutowirePartialView property with a reference to the containing page as shown here. You should not set the ViewModelLocator.AutowireViewModel property on the Partial View unless you are explicitly opting out as setting this property to true directly may result in the ViewModel being incorrectly set.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:AwesomeApp.Views"
             xmlns:prism="clr-namespace:Prism.Ioc;assembly=Prism.Forms"
             xmlns:mvvm="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             x:Name="self"
             x:Class="AwesomeApp.Views.ViewA">
  <StackLayout>
    <local:AwesomeView mvvm:ViewModelLocator.AutowirePartialView="{x:Reference self}" />
    <Entry Text="{Binding SomeValue" />
  </StackLayout>
</ContentPage>

Dependency Resolver

Xamarin.Forms 3.1 introduces a new DependencyResolver. This enables applications using Dependency Injection to use their Container to resolve Platform Renderers and Effects which makes it possible to inject any services such as a logger. Since the default constructor was deprecated in Android Renderers as of Xamarin.Forms 2.5, Prism now includes a specific Android binary that enables the DependencyResolver to resolve types using

ContainerProvider

The Container Provider now allows types like ValueConverters to include Dependency Injection of Types/Services in the ctor, and allows the converter to be declared in XAML

namespace Contoso.Converters
{
    public class MyValueConverter : IValueConverter
    {
        private ILoggerFacade _logger { get; }

        public MyValueConverter(ILoggerFacade logger)
        {
            _logger = logger;
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting value", Category.Debug, Priority.None);
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting Value Back...", Category.Debug, Priority.None);
            return value;
        }
    }
}

This can then be used in XAML using the ContainerProvider as follows:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:ioc="clr-namespace:Prism.Ioc;assembly=Prism.Forms"
             xmlns:converters="using:Contoso.Converters"
             x:Class="Contoso.Views.ViewA">
    <ContentPage.Resources>
        <ResourceDictionary>
            <ioc:ContainerProvider x:TypeArguments="converters:MyValueConverter" x:Key="myValueConverter" />
        </ResourceDictionary>
    </ContentPage.Resources>
    <Entry Text="{Binding Demo,Converter={StaticResource myValueConverter}}" />
</ContentPage>

**Implemented relative back behavior ("../../") **

Previously, when using the relative back feature ("../" ) you would be required to provide a page that would be pushed onto the navigation stack. That is no longer required. You may now chain together any number of relative go-back instructions to "go back".

For example: Given your navigation stack looked like this: NavigationPage/UserList/UserDetails/LoginPage/EditUser

You can now indicate how many pages to remove, or "go back" by chaining the relative go-back instruction "../".

NavigationService.NavigateAsync("../../../");

This would result in going back three pages leaving you with the following navigation stack:

NavigationPage/UserList

NOTE - The pages in the stack prior to the current page (last page in the nav stack) will be removed without calling any INavAware methods. Only the current page (EditUser in this example) would perform a proper GoBackAsync and execute the INavAware methods.

NOTE - This feature is only supported while within the context of a NavigationPage.

XAML Navigation

You can now use XAML Navigation Extensions to Navigate. This works well for scenarios where you may have a partial "MenuView" that may be reused across multiple Pages or where there may be no real reason to implement Navigation inside of a ViewModel.

<!-- basic nav -->
<Button Text="Go To About" Command"{prism:NavigateTo 'About'}" />

<!-- basic nav without animation-->
<Button Text="Go To About" Command"{prism:NavigateTo 'About', Animated=False}" />

<!-- basic modal nav -->
<Button Text="Go To About" Command"{prism:NavigateTo 'About', UseModalNavigation=True}" />

<!-- custom can navigate support -->
<Button Text="Go To About" Command="{prism:NavigateTo 'About'}" prism:Navigation.CanNavigate="{Binding CanNavigate}" />

<!-- go to new page, but remove one along the way -->
<Button Text="Go To Settings" Command"{prism:NavigateTo '../Settings'}" />

<!-- nav with VM Parameters -->
<Button Text="Go To About" 
        Command"{prism:NavigateTo 'About'}" 
        CommandParameters="{Binding MyNavParams}" />

<!-- Go Back -->
<Button Text="Go Back" Command="{prism:GoBack}" />

<!-- Go Back To Root -->
<Button Text="Go Back To Root" Command="{prism:GoBack ToRoot}" />

<!-- Xaml defined parameters -->
<Button Text="Go To About" Command="{prism:NavigateTo 'About'}" >
    <Button.CommandParameter>
        <prism:XamlNavigationParameters Parent="{x:Reference this}">
            <prism:XamlNavigationParameter Key="MainPageViewModel" Value="{Binding .}" />
        </prism:XamlNavigationParameters>
    </Button.CommandParameter>
</Button>

<!-- can navigate on a parent object-->
<ContentView>
    <ContentView prism:Navigation.CanNavigate="False">
        <ContentView>
            <Button Text="Cannot Navigate" Command="{prism:GoBack}" /> 
        </ContentView>
    </ContentView>
</ContentView>

Prism.WPF

  • #30: Removing from, or opting out of registration, in the IRegionNavigationJournal
  • #993: RemoveAll throws if KeepAlive is false
  • #1013: MEF DirectoryModuleCatalog - problem with diacritics since 6.3
  • #1120: Prism.Autofac RegisterTypeForNavigation issue
  • #1128: ViewModelLocator triggers in design mode
  • #1161: Ninject - Prism creating new view even if view exists in region
  • #1165: Change PopupWindowAction.CreateDefaultWindow to virtual
  • #1175: Upgraded to Unity 5 Breaking
  • #1211: Upgrade to CommonServiceLocator 2.0.1 Breaking
  • #1217: Add OnInitialized methdo to bootstrapper
  • #1242: AssemblyResolver - File path in FileNotFoundException
  • #1261: ListDictionary TKey and TValue same type Breaking
  • #1264: Is it possible to provide a type safe way to read parameter
  • #1321: Added support for regions targeting FrameworkContentElements
  • #1327: Include correct version of System.Windows.Interactivity
  • #1328: Regions attached to DependencyObject sometimes won't register
  • #1414: BREAKING Changed from Unity NuGet to Unity.Container
  • #1463: DryIoc Default Rules Change. By default DryIoc will attempt to resolve types based on an available constructor with resolvable types. Secondary registrations will now replace any initial registration by default.
  • #1476: Module Alignment BREAKING
    • Moved Exceptions to Prism.Core
    • Moved ModuleInfo to Prism.Core (see #1509)
    • Moved IModuleCatalogItem to Prism.Core
    • Moved IModuleInitializer to Prism.Core
    • Moved IModuleManager to Prism.Core
  • #1479: Fixes issue that prevented Prism.Autofac apps from starting
  • #1493: Fixes issue that prevented Prism.Ninject apps from starting
  • #1504: Memory problem with EventAggregator and never published message
  • #1509: Module Alignment
    • Introduced new IModuleInterface and moved concrete implementations back to the Platform level. This fixes a break that would affect any ModuleCatalogs defined in XAML caused by changing the resolving assembly in the XML Namespace.
  • #1511: Module Alignment
    • All modularity interfaces and base & supporting types moved to Prism.Core
  • #1543: Calling ToString() on NavigationParameters causes NullReferenceException when parameter is null.

New PrismApplication Base Class

The Bootstrapper has been marked obsolete and it is recommended to use the PrimsApplication class going forward. This results in less code to get started, and an easier and more intuitive API.

Note: The Bootstrapper class is not being removed, it is only marked obsolete to drive awareness of the new PrismApplication class.

Added new Prism.Ioc namespace to handle DI container abstractions. Interacting with the container is now done via the IContainerProvider and the IContainerRegistry interfaces. The IContainerProvider interface is used to resolve services from the container. The IContainerRegistry is used to register types with the container. Access to the actual DI container can be achieved by using the GetContainer() extension method off of the IContainerRegistry and IContainerProvider interfaces.

7.1.0-pre4

5 years ago

General

This release introduces the final API alignment for Prism.Modularity. This undoes some breaking changes made in Preview 3 to make the upgrade path easier for WPF apps that declare ModuleCatalogs in XAML. This also introduces support for Partial Views for Xamarin Forms.

Prism.Core

  • #1348: Navigation Alignment - moved all navigation interfaces into Prism Core (currently hidden from WPF)
  • #1476: Module Alignment - moved Exceptions, ModuleInfo, and several Modularity interfaces to Prism.Core from WPF combining with some Prism.Forms definitions.
    • IModuleManager.ModuleDownloadProgressChanged (available in net45 aka WPF ONLY)
  • #1505: Memory problem with EventAggregator and never published message
  • #1509: Module Alignment Updates: Introduce IModuleInfo
  • #1511: Module Alignment
    • All modularity interfaces and base & supporting types moved to Prism.Core

Prism.Forms

  • #1348: Navigation alignment
    • Added INavigationParameters
    • Added INavigationParametersInternal
    • Added INavigationResult
    • Convert all methods using NavigationParameters to use the new INavigationParameters BREAKING
    • Changed Task INavigationService.NavigateAsync to Task<INavigationResult> INavigationService.NavigateAsync
    • Changed Task<bool> INavigationService.GoBackAsync to Task<INavigationResult> INavigationService.GoBackAsync BREAKING
  • #1347: ContainerProvider<T> - Allows Declaring Types in XAML that require the Container to Resolve them
  • #1353: NavigationFrom not called when navigate to different Hamburger Menu Page
  • #1354: INavigationAware methods are not called on children of a CarouselPage
  • #1403: Remove pages from NavigationStack without pushing another one
  • #1414: Changed from Unity NuGet to Unity.Container BREAKING
  • #1425: XAML Navigation
  • #1439: DependencyResolver
  • #1456: Relative back navigation does not work with INavigationParameters
  • #1463: DryIoc Default Rules Change. By default DryIoc will attempt to resolve types based on an available constructor with resolvable types. Secondary registrations will now replace any initial registration by default.
  • #1464: Unity and Autofac no longer require INavigationService to be named navigationService inside of a ViewModel.
  • #1469: Make Xamarin.Forms DependencyResolver Opt-In
  • #1476: Module Alignment BREAKING
    • ModuleInfo.ModuleType has changed from System.Type to System.String and is equal to Type.AssemblyQualifiedName
    • IModuleManager.LoadModuleCompleted - Forms will now invoke this event when a new module has been loaded. Note there is not currently a default handler provided by PrismApplication. This event will contain any caught exception that was thrown while attempting to load a Module.
    • Moved all Modularity interfaces except IModuleCatalog to Prism.Core
  • #1509: Module Alignment
    • Adds IModuleInfo
    • ModuleInfo moved back to Prism.Forms. ModuleInfo will now return Module Dependencies when decorated with the ModuleDependencyAttribute if dependencies are not set at Registration.
  • #1511: Module Alignment - All modularity interfaces and base & supporting types moved to Prism.Core
  • #1519: Support Partial Views in Xamarin Forms
  • #1546: MasterDetailPage navigation on iOS is unexcepted
  • #1549: EventToCommandBehavior.OnEventRaised NullReferenceException

Partial Views

The concept of a Partial View is to support a custom layout which may be reused across multiple pages, and eliminate ViewModel logic duplication by allowing that custom layout to rely on its own ViewModel. To use a Partial View you must set the ViewModelLocator.AutowirePartialView property with a reference to the containing page as shown here. You should not set the ViewModelLocator.AutowireViewModel property on the Partial View unless you are explicitly opting out as setting this property to true directly may result in the ViewModel being incorrectly set.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:AwesomeApp.Views"
             xmlns:prism="clr-namespace:Prism.Ioc;assembly=Prism.Forms"
             xmlns:mvvm="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             x:Name="self"
             x:Class="AwesomeApp.Views.ViewA">
  <StackLayout>
    <local:AwesomeView mvvm:ViewModelLocator.AutowirePartialView="{x:Reference self}" />
    <Entry Text="{Binding SomeValue" />
  </StackLayout>
</ContentPage>

Dependency Resolver

Xamarin.Forms 3.1 introduces a new DependencyResolver. This enables applications using Dependency Injection to use their Container to resolve Platform Renderers and Effects which makes it possible to inject any services such as a logger. Since the default constructor was deprecated in Android Renderers as of Xamarin.Forms 2.5, Prism now includes a specific Android binary that enables the DependencyResolver to resolve types using

ContainerProvider

The Container Provider now allows types like ValueConverters to include Dependency Injection of Types/Services in the ctor, and allows the converter to be declared in XAML

namespace Contoso.Converters
{
    public class MyValueConverter : IValueConverter
    {
        private ILoggerFacade _logger { get; }

        public MyValueConverter(ILoggerFacade logger)
        {
            _logger = logger;
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting value", Category.Debug, Priority.None);
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting Value Back...", Category.Debug, Priority.None);
            return value;
        }
    }
}

This can then be used in XAML using the ContainerProvider as follows:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:ioc="clr-namespace:Prism.Ioc;assembly=Prism.Forms"
             xmlns:converters="using:Contoso.Converters"
             x:Class="Contoso.Views.ViewA">
    <ContentPage.Resources>
        <ResourceDictionary>
            <ioc:ContainerProvider x:TypeArguments="converters:MyValueConverter" x:Key="myValueConverter" />
        </ResourceDictionary>
    </ContentPage.Resources>
    <Entry Text="{Binding Demo,Converter={StaticResource myValueConverter}}" />
</ContentPage>

**Implemented relative back behavior ("../../") **

Previously, when using the relative back feature ("../" ) you would be required to provide a page that would be pushed onto the navigation stack. That is no longer required. You may now chain together any number of relative go-back instructions to "go back".

For example: Given your navigation stack looked like this: NavigationPage/UserList/UserDetails/LoginPage/EditUser

You can now indicate how many pages to remove, or "go back" by chaining the relative go-back instruction "../".

NavigationService.NavigateAsync("../../../");

This would result in going back three pages leaving you with the following navigation stack:

NavigationPage/UserList

NOTE - The pages in the stack prior to the current page (last page in the nav stack) will be removed without calling any INavAware methods. Only the current page (EditUser in this example) would perform a proper GoBackAsync and execute the INavAware methods.

NOTE - This feature is only supported while within the context of a NavigationPage.

XAML Navigation

You can now use XAML Navigation Extensions to Navigate. This works well for scenarios where you may have a partial "MenuView" that may be reused across multiple Pages or where there may be no real reason to implement Navigation inside of a ViewModel.

<!-- basic nav -->
<Button Text="Go To About" Command"{prism:NavigateTo 'About'}" />

<!-- basic nav without animation-->
<Button Text="Go To About" Command"{prism:NavigateTo 'About', Animated=False}" />

<!-- basic modal nav -->
<Button Text="Go To About" Command"{prism:NavigateTo 'About', UseModalNavigation=True}" />

<!-- custom can navigate support -->
<Button Text="Go To About" Command="{prism:NavigateTo 'About'}" prism:Navigation.CanNavigate="{Binding CanNavigate}" />

<!-- go to new page, but remove one along the way -->
<Button Text="Go To Settings" Command"{prism:NavigateTo '../Settings'}" />

<!-- nav with VM Parameters -->
<Button Text="Go To About" 
        Command"{prism:NavigateTo 'About'}" 
        CommandParameters="{Binding MyNavParams}" />

<!-- Go Back -->
<Button Text="Go Back" Command="{prism:GoBack}" />

<!-- Go Back To Root -->
<Button Text="Go Back To Root" Command="{prism:GoBack ToRoot}" />

<!-- Xaml defined parameters -->
<Button Text="Go To About" Command="{prism:NavigateTo 'About'}" >
    <Button.CommandParameter>
        <prism:XamlNavigationParameters Parent="{x:Reference this}">
            <prism:XamlNavigationParameter Key="MainPageViewModel" Value="{Binding .}" />
        </prism:XamlNavigationParameters>
    </Button.CommandParameter>
</Button>

<!-- can navigate on a parent object-->
<ContentView>
    <ContentView prism:Navigation.CanNavigate="False">
        <ContentView>
            <Button Text="Cannot Navigate" Command="{prism:GoBack}" /> 
        </ContentView>
    </ContentView>
</ContentView>

Prism.WPF

  • #30: Removing from, or opting out of registration, in the IRegionNavigationJournal
  • #993: RemoveAll throws if KeepAlive is false
  • #1013: MEF DirectoryModuleCatalog - problem with diacritics since 6.3
  • #1120: Prism.Autofac RegisterTypeForNavigation issue
  • #1128: ViewModelLocator triggers in design mode
  • #1161: Ninject - Prism creating new view even if view exists in region
  • #1165: Change PopupWindowAction.CreateDefaultWindow to virtual
  • #1175: Upgraded to Unity 5 Breaking
  • #1211: Upgrade to CommonServiceLocator 2.0.1 Breaking
  • #1217: Add OnInitialized methdo to bootstrapper
  • #1242: AssemblyResolver - File path in FileNotFoundException
  • #1261: ListDictionary TKey and TValue same type Breaking
  • #1264: Is it possible to provide a type safe way to read parameter
  • #1321: Added support for regions targeting FrameworkContentElements
  • #1327: Include correct version of System.Windows.Interactivity
  • #1414: BREAKING Changed from Unity NuGet to Unity.Container
  • #1463: DryIoc Default Rules Change. By default DryIoc will attempt to resolve types based on an available constructor with resolvable types. Secondary registrations will now replace any initial registration by default.
  • #1476: Module Alignment BREAKING
    • Moved Exceptions to Prism.Core
    • Moved ModuleInfo to Prism.Core (see #1509)
    • Moved IModuleCatalogItem to Prism.Core
    • Moved IModuleInitializer to Prism.Core
    • Moved IModuleManager to Prism.Core
  • #1479: Fixes issue that prevented Prism.Autofac apps from starting
  • #1493: Fixes issue that prevented Prism.Ninject apps from starting
  • #1504: Memory problem with EventAggregator and never published message
  • #1509: Module Alignment
    • Introduced new IModuleInterface and moved concrete implementations back to the Platform level. This fixes a break that would affect any ModuleCatalogs defined in XAML caused by changing the resolving assembly in the XML Namespace.
  • #1511: Module Alignment
    • All modularity interfaces and base & supporting types moved to Prism.Core
  • #1543: Calling ToString() on NavigationParameters causes NullReferenceException when parameter is null.

New PrismApplication Base Class

The Bootstrapper has been marked obsolete and it is recommended to use the PrimsApplication class going forward. This results in less code to get started, and an easier and more intuitive API.

Note: The Bootstrapper class is not being removed, it is only marked obsolete to drive awareness of the new PrismApplication class.

Added new Prism.Ioc namespace to handle DI container abstractions. Interacting with the container is now done via the IContainerProvider and the IContainerRegistry interfaces. The IContainerProvider interface is used to resolve services from the container. The IContainerRegistry is used to register types with the container. Access to the actual DI container can be achieved by using the GetContainer() extension method off of the IContainerRegistry and IContainerProvider interfaces.

7.1.0-pre3

5 years ago

General

Prism now has support for SourceLink. This adds metadata that allow Visual Studio to determine the exact commit that was built and pull the source from GitHub from that commit, thus allowing you to step directly into Prism's code while debugging.

Trust is important, and we believe you should be able to trust that the NuGet Packages we ship are authentic and have not been tampered with. As such all Prism NuGet packages are now signed by our EV Certificate providing you the ability to see very clearly that the package is authentically from the Prism team.

Prism.Core

  • #1348: Navigation Alignment - moved all navigation interfaces into Prism Core (currently hidden from WPF)
  • #1476: Module Alignment - moved Exceptions, ModuleInfo, and several Modularity interfaces to Prism.Core from WPF combining with some Prism.Forms definitions.
    • IModuleManager.ModuleDownloadProgressChanged (available in net45 aka WPF ONLY)

Prism.Forms

  • #1348: Navigation alignment
    • Added INavigationParameters
    • Added INavigationParametersInternal
    • Added INavigationResult
    • Convert all methods using NavigationParameters to use the new INavigationParameters BREAKING
    • Changed Task INavigationService.NavigateAsync to Task<INavigationResult> INavigationService.NavigateAsync
    • Changed Task<bool> INavigationService.GoBackAsync to Task<INavigationResult> INavigationService.GoBackAsync BREAKING
  • #1347: ContainerProvider<T> - Allows Declaring Types in XAML that require the Container to Resolve them
  • #1353: NavigationFrom not called when navigate to different Hamburger Menu Page
  • #1354: INavigationAware methods are not called on children of a CarouselPage
  • #1403: Remove pages from NavigationStack without pushing another one
  • #1414: Changed from Unity NuGet to Unity.Container BREAKING
  • #1425: XAML Navigation
  • #1439: DependencyResolver
  • #1456: Relative back navigation does not work with INavigationParameters
  • #1463: DryIoc Default Rules Change. By default DryIoc will attempt to resolve types based on an available constructor with resolvable types. Secondary registrations will now replace any initial registration by default.
  • #1464: Unity and Autofac no longer require INavigationService to be named navigationService inside of a ViewModel.
  • #1469: Make Xamarin.Forms DependencyResolver Opt-In
  • #1476: Module Alignment BREAKING
    • ModuleInfo.ModuleType has changed from System.Type to System.String and is equal to Type.AssemblyQualifiedName
    • IModuleManager.LoadModuleCompleted - Forms will now invoke this event when a new module has been loaded. Note there is not currently a default handler provided by PrismApplication. This event will contain any caught exception that was thrown while attempting to load a Module.
    • Moved all Modularity interfaces except IModuleCatalog to Prism.Core

Dependency Resolver

Xamarin.Forms 3.1 introduces a new DependencyResolver. This enables applications using Dependency Injection to use their Container to resolve Platform Renderers and Effects which makes it possible to inject any services such as a logger. Since the default constructor was deprecated in Android Renderers as of Xamarin.Forms 2.5, Prism now includes a specific Android binary that enables the DependencyResolver to resolve types using

ContainerProvider

The Container Provider now allows types like ValueConverters to include Dependency Injection of Types/Services in the ctor, and allows the converter to be declared in XAML

namespace Contoso.Converters
{
    public class MyValueConverter : IValueConverter
    {
        private ILoggerFacade _logger { get; }

        public MyValueConverter(ILoggerFacade logger)
        {
            _logger = logger;
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting value", Category.Debug, Priority.None);
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting Value Back...", Category.Debug, Priority.None);
            return value;
        }
    }
}

This can then be used in XAML using the ContainerProvider as follows:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:ioc="clr-namespace:Prism.Ioc;assembly=Prism.Forms"
             xmlns:converters="using:Contoso.Converters"
             x:Class="Contoso.Views.ViewA">
    <ContentPage.Resources>
        <ResourceDictionary>
            <ioc:ContainerProvider x:TypeArguments="converters:MyValueConverter" x:Key="myValueConverter" />
        </ResourceDictionary>
    </ContentPage.Resources>
    <Entry Text="{Binding Demo,Converter={StaticResource myValueConverter}}" />
</ContentPage>

**Implemented relative back behavior ("../../") **

Previously, when using the relative back feature ("../" ) you would be required to provide a page that would be pushed onto the navigation stack. That is no longer required. You may now chain together any number of relative go-back instructions to "go back".

For example: Given your navigation stack looked like this: NavigationPage/UserList/UserDetails/LoginPage/EditUser

You can now indicate how many pages to remove, or "go back" by chaining the relative go-back instruction "../".

NavigationService.NavigateAsync("../../../");

This would result in going back three pages leaving you with the following navigation stack:

NavigationPage/UserList

NOTE - The pages in the stack prior to the current page (last page in the nav stack) will be removed without calling any INavAware methods. Only the current page (EditUser in this example) would perform a proper GoBackAsync and execute the INavAware methods.

NOTE - This feature is only supported while within the context of a NavigationPage.

XAML Navigation

You can now use XAML Navigation Extensions to Navigate. This works well for scenarios where you may have a partial "MenuView" that may be reused across multiple Pages or where there may be no real reason to implement Navigation inside of a ViewModel.

<!-- basic nav -->
<Button Text="Go To About" Command"{prism:NavigateTo 'About'}" />

<!-- basic nav without animation-->
<Button Text="Go To About" Command"{prism:NavigateTo 'About', Animated=False}" />

<!-- basic modal nav -->
<Button Text="Go To About" Command"{prism:NavigateTo 'About', UseModalNavigation=True}" />

<!-- custom can navigate support -->
<Button Text="Go To About" Command="{prism:NavigateTo 'About'}" prism:Navigation.CanNavigate="{Binding CanNavigate}" />

<!-- go to new page, but remove one along the way -->
<Button Text="Go To Settings" Command"{prism:NavigateTo '../Settings'}" />

<!-- nav with VM Parameters -->
<Button Text="Go To About" 
        Command"{prism:NavigateTo 'About'}" 
        CommandParameters="{Binding MyNavParams}" />

<!-- Go Back -->
<Button Text="Go Back" Command="{prism:GoBack}" />

<!-- Go Back To Root -->
<Button Text="Go Back To Root" Command="{prism:GoBack ToRoot}" />

<!-- Xaml defined parameters -->
<Button Text="Go To About" Command="{prism:NavigateTo 'About'}" >
    <Button.CommandParameter>
        <prism:XamlNavigationParameters Parent="{x:Reference this}">
            <prism:XamlNavigationParameter Key="MainPageViewModel" Value="{Binding .}" />
        </prism:XamlNavigationParameters>
    </Button.CommandParameter>
</Button>

<!-- can navigate on a parent object-->
<ContentView>
    <ContentView prism:Navigation.CanNavigate="False">
        <ContentView>
            <Button Text="Cannot Navigate" Command="{prism:GoBack}" /> 
        </ContentView>
    </ContentView>
</ContentView>

Prism.Wpf

  • #30: Removing from, or opting out of registration, in the IRegionNavigationJournal
  • #993: RemoveAll throws if KeepAlive is false
  • #1013: MEF DirectoryModuleCatalog - problem with diacritics since 6.3
  • #1120: Prism.Autofac RegisterTypeForNavigation issue
  • #1128: ViewModelLocator triggers in design mode
  • #1161: Ninject - Prism creating new view even if view exists in region
  • #1165: Change PopupWindowAction.CreateDefaultWindow to virtual
  • #1175: Upgraded to Unity 5 Breaking
  • #1211: Upgrade to CommonServiceLocator 2.0.1 Breaking
  • #1217: Add OnInitialized methdo to bootstrapper
  • #1242: AssemblyResolver - File path in FileNotFoundException
  • #1261: ListDictionary TKey and TValue same type Breaking
  • #1264: Is it possible to provide a type safe way to read parameter
  • #1321: Added support for regions targeting FrameworkContentElements
  • #1327: Include correct version of System.Windows.Interactivity
  • #1414: BREAKING Changed from Unity NuGet to Unity.Container
  • #1463: DryIoc Default Rules Change. By default DryIoc will attempt to resolve types based on an available constructor with resolvable types. Secondary registrations will now replace any initial registration by default.
  • #1476: Module Alignment BREAKING
    • Moved Exceptions to Prism.Core
    • Moved ModuleInfo to Prism.Core
    • Moved IModuleCatalogItem to Prism.Core
    • Moved IModuleInitializer to Prism.Core
    • Moved IModuleManager to Prism.Core

New PrismApplication Base Class

The Bootstrapper has been marked obsolete and it is recommended to use the PrimsApplication class going forward. This results in less code to get started, and an easier and more intuitive API.

Added new Prism.Ioc namespace to handle DI container abstractions. Interacting with the container is now done via the IContainerProvider and the IContainerRegistry interfaces. The IContainerProvider interface is used to resolve services from the container. The IContainerRegistry is used to register types with the container. Access to the actual DI container can be achieved by using the GetContainer() extension method off of the IContainerRegistry and IContainerProvider interfaces.

7.1.0-pre1

6 years ago

General Notes

Note that all Prism applications using Unity will need to uninstall Unity due to a change from depending on Unity nuget to Unity.Container. This change reduces the number of Unity assemblies being referenced by 75% and removes an obscure secondary reference to CommonServiceLocator for WPF applications.

Prism 7.1 is NOT compatible with the Xamarin Forms WPF backend.

Prism.Core

  • #1348: Navigation Alignment - moved all navigation interfaces into Prism Core (currently hidden from WPF)

Prism.Forms

  • #1348: Navigation alignment
    • Added INavigationParameters
    • Added INavigationParametersInternal
    • Added INavigationResult
    • Convert all methods using NavigationParameters to use the new INavigationParameters BREAKING
    • Changed Task INavigationService.NavigateAsync to Task<INavigationResult> INavigationService.NavigateAsync
    • Changed Task<bool> INavigationService.GoBackAsync to Task<INavigationResult> INavigationService.GoBackAsync BREAKING
  • #1347: ContainerProvider<T> - Allows Declaring Types in XAML that require the Container to Resolve them
  • #1353: NavigationFrom not called when navigate to different Hamburger Menu Page
  • #1354: INavigationAware methods are not called on children of a CarouselPage
  • #1414: BREAKING Changed from Unity NuGet to Unity.Container

ContainerProvider

The Container Provider now allows types like ValueConverters to include Dependency Injection of Types/Services in the ctor, and allows the converter to be declared in XAML

namespace Contoso.Converters
{
    public class MyValueConverter : IValueConverter
    {
        private ILoggerFacade _logger { get; }

        public MyValueConverter(ILoggerFacade logger)
        {
            _logger = logger;
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting value", Category.Debug, Priority.None);
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            _logger.Log("Converting Value Back...", Category.Debug, Priority.None);
            return value;
        }
    }
}

This can then be used in XAML using the ContainerProvider as follows:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:ioc="clr-namespace:Prism.Ioc;assembly=Prism.Forms"
             xmlns:converters="using:Contoso.Converters"
             x:Class="Contoso.Views.ViewA">
    <ContentPage.Resources>
        <ResourceDictionary>
            <ioc:ContainerProvider x:TypeArguments="converters:MyValueConverter" x:Key="myValueConverter" />
        </ResourceDictionary>
    </ContentPage.Resources>
    <Entry Text="{Binding Demo,Converter={StaticResource myValueConverter}}" />
</ContentPage>

Prism.WPF

  • #30: Removing from, or opting out of registration, in the IRegionNavigationJournal
  • #993: RemoveAll throws if KeepAlive is false
  • #1013: MEF DirectoryModuleCatalog - problem with diacritics since 6.3
  • #1120: Prism.Autofac RegisterTypeForNavigation issue
  • #1128: ViewModelLocator triggers in design mode
  • #1161: Ninject - Prism creating new view even if view exists in region
  • #1165: Change PopupWindowAction.CreateDefaultWindow to virtual
  • #1175: Upgraded to Unity 5 Breaking
  • #1211: Upgrade to CommonServiceLocator 2.0.1 Breaking
  • #1217: Add OnInitialized methdo to bootstrapper
  • #1242: AssemblyResolver - File path in FileNotFoundException
  • #1261: ListDictionary TKey and TValue same type Breaking
  • #1264: Is it possible to provide a type safe way to read parameter
  • #1321: Added support for regions targeting FrameworkContentElements
  • #1327: Include correct version of System.Windows.Interactivity
  • #1414: BREAKING Changed from Unity NuGet to Unity.Container

New PrismApplication Base Class

The Bootstrapper has been marked obsolete and it is recommended to use the PrimsApplication class going forward. This results in less code to get started, and an easier and more intuitive API.

Added new Prism.Ioc namespace to handle DI container abstractions. Interacting with the container is now done via the IContainerProvider and the IContainerRegistry interfaces. The IContainerProvider interface is used to resolve services from the container. The IContainerRegistry is used to register types with the container. Access to the actual DI container can be achieved by using the GetContainer() extension method off of the IContainerRegistry and IContainerProvider interfaces.

7.0.0-Forms-SR1

6 years ago

For apps that have not upgraded from 6.X to 7.0, please be sure to read the initial 7.0 release notes for a complete listing of changes.

This will break users who have existing implementations of IModule. Note that Initialize has been completely removed. All Initialization logic should be moved to OnInitialized. Any services that need to be resolved can now be resolved using IContainerProvider in OnInitialized.

  • #1308: Updates BindableBase to use EqualityComparer in SetProperty
  • #1333: Select tabs when navigating from a MasterDetailPage and reusing the TabbedPage
  • #1338: BREAKING CHANGE Changes IModule.OnInitialized() => IModule.OnInitialized(IContainerProvider)
  • #1342: BREAKING CHANGE Removes IModule.Initialize

7.0.0-Forms

6 years ago

General Notes

Before upgrading from Prism 6.3, please be sure to read through the release notes as there are several major and breaking changes. This release is only for Prism Core and Prism for Xamarin Forms ONLY.

Ninject Support

Ninject has been removed as a supported DI Container for Prism Forms due to compatibility issues with Ninject on iOS and Android.

Prism Core

  • .NET Standard Support

  • Added method to clear all errors on ErrorsContainer

  • Removed requirement for parameter in delegate definition of DelegateCommand.ObservesCanExecute Breaking Example: Old (v6.3): ObservesCanExcute((**vm**) => Property) New (v7.0): ObservesCanExecute(() => Property)

  • Add capability to DelegateCommand's ObservesProperty to observe properties of complex types Example: ObservesProperty(() => Property.NestedProperty.NestedPoperty)

Prism Forms

  • #650: Navigating between Tabs Breaking

  • #683: .NET Standard support

  • #765: Deep linking within a NavigationPage results in an incorrect ContentPage Title on Android

  • #921: Add ability to Remove pages from the navigation stack

  • #946: Support designating useModalNavigation for specific segments in Uri navigation

  • #1007: Re-license to MIT, following the Microsoft led projects

  • #1008: NavigationParameters: Not possible to specify parent type as generic parameter T

  • #1109: Retrieve current URI from Prism Xamarin.Forms NavigationService

  • #1111: Include pdb file in nuget package

  • #1024: XF: NavigationService swallowing Exceptions

  • #1025: Xamarin.Forms deprecated the Device.OS property in favor of the RuntimePlatform property. The following changes were made to accommodate these changes: IDeviceService

  • deprecated OnPlatform methods

  • added DeviceRuntimePlatform property - this mimics the XF API and returns a string

  • added RuntimePlatform property which returns an Enum of type RuntimePlatform and wraps the XF string-based values

  • #1027: Support macOS

  • #1044: When Detail of MasterDetailPage is null, Modal Navigation is possible

  • #1045: When calling NavigateAsync with NavigationPage, old page's Destroy on the stack is not called

  • #1046: When calling DeepLink from Navigation Stack, the second page becomes Modal navigation

  • #1054: When deep linking within NavigationPage, page order is reversed

  • #1063: Master of MasterDetailPage will not be destroyed

  • #1074: Optimize Xamarin Forms DryIoc adapter performance

  • #1085: Error occurs if null path is specified in EventToCommandBehavior

  • #1089: DebugLogger does not work in nuget-package

  • #1099: Introduce a Behavior factory into the navigation service

  • #1132: Prism Forms Modularity extension methods

  • #1133: IModuleCatalog AddModule returns wrong type

  • #1139: Modularity Enhancements

  • #1175: Upgraded to Unity 5 Breaking

  • #1076: IActiveAware not working when ContentPage (as child of a TabbedPage) is wrapped into a NavigationPage

  • #1166: Custom NavigationPage is not working properly Prism 7

  • #1187: Change TabbedPage navigation behavior Breaking

  • #1198: Rename IApplicationLifecycle to IApplicationLifecycleAware Breaking

  • #1200: Add GoBackToRoot method

  • #1232: PageNavigationService should check for MultiPage Parent

  • #1225: OnNavigatedTo Contains Extra Parameter

  • #1254: remove support for DependenyService autoresolution Breaking

  • #1286: Adding modules to Prism in newest PR version

  • #1325: Removes support for Ninject due to container incompatibility with iOS and Android

  • added IPageLifecycleAware and PageLifecycleAwareBehavior to enable responding to the Page's Appearing and Disappearing events

Container Extensions

  • deprecated the RegisterTypeForNavigationOnPlatform signature that requires explicit platform parameters
  • added new signature that accepts new IPlatform objects Example:
Container.RegisterForNavigationOnPlatform<MainPage, MainPageViewModel>("Main", 
	new Platform<MainPage_Android>(RuntimePlatform.Android),
	new Platform<MainPage_iOS>(RuntimePlatform.iOS));

PrismApplication API Changes - BREAKING

Added new Prism.Ioc namespace to handle DI container abstractions. Interacting with the container is now done via the IContainerProvider and the IContainerRegistry interfaces. The IContainerProvider interface is used to resolve services from the container. The IContainerRegistry is used to register types with the container. Access to the actual DI container can be achieved by using the GetContainer() extension method off of the IContainerRegistry and IContainerProvider interfaces.

Notable changes:

  • Removed ModuleCatalog property
  • Changed signature of ConfigureModuleCatalog() to ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
  • Changed signature of RegisterTypes() to RegisterTypes(IContainerRegistry containterRegistry)
  • Removed CreateContainer() method
  • Removed CreateNavigationService() method
  • Removed CreateLogger() method
  • Removed CreateModuleManager() method
  • Removed CreateModuleCatalog() method
  • Changed order of application initialization process (platform specific types are registered before application types)
  • Container property is now of type IContainerProvider
  • Renamed ConfigureContainer to RegisterRequiredTypes(IContainerRegistry containterRegistry)
  • Renamed RegisterTypeForNavigation to RegisterForNavigation

IModule API Changes - BREAKING

  • Obsolete Initialize() method - move all existing code into RegisterTypes and OnInitialized methods
  • Added RegisterTypes(IContainerRegistry containerRegistry) method - used to register types with the container
  • Added OnInitialized() method - used to perform any action after the module has been created, and types have been registered with the container.

ModuleInfo API Changes - BREAKING

  • Removed defaut ctor
  • Changed order of ctor parameters from ModuleInfo(Name, ModuleType, Mode) to ModuleInfo(ModuleType, Name, Mode)

TabbedPage Navigation Behavior Change - BREAKING

Current Behavior (v6.3.0)

NavigateAsync("TabbedPage/ViewA/ViewB") will select the tab ViewA in the TabbedPage if it exists, then continue navigating. If ViewA does not exist as a tab, then you will continue to navigate as expected.

NavigateAsync("TabbedPage/NavigationPage/ViewA/ViewB") would search the TabbedPage for the first instance of a tab that was a NavigationPage, then navigate within the Navigation page the remaining ViewA and ViewB pages. This provided the ability to deep link into a tab's nested navigation page, but there was no way to opt-out of this behavior.

Also, the INavigationAware methods did not get called to all tabs meaning that you would be responsible for forwarding any parameters to all your tabs.

New Behavior

NavigateAsync("TabbedPage/ViewA/ViewB") will no longer select any tabs, but rather continue processing the navigation as separate pages on the navigation stack.

If you wish to select a tab, you will now use a parameter called "selectedTab" to indicate which tab you would like to select.

NavigateAsync("TabbedPage?selectedTab=MiddleTab/ViewA/ViewB")

This will navigate to the TabbedPage, selected the "MiddleTab" and continue navigating ViewA and ViewB onto the navigation stack.

For tabs that are wrapped inside a NavigationPage, you do not need to change anything. The syntax is the same. This will search each tab to see if it is a navigation page and if the CurrentPage of the NavigationPage matches "MiddleTab", the tab will be selected. This is much more flexible than the existing behavior as before it would take the first instance of the NavigationPage found. Now you can choose which tab exactly.

There is a constant in the KnownNavigationParameters called SelectedTab that you can use instead of a string.

NavigateAsync($"TabbedPage?{KnownNavigationParameters.SelectedTab}=MiddleTab")

Some INavigationAware methods are now fired on all Tabs:

  • OnNavigatingTo will be invoked on the TabbedPage and ALL TABS.
  • OnNavigatedTo will be invoked on the TabbedPage and only the SELECTED TAB.
  • OnNavigatedFrom will be invoked on the TabbedPage and only the SELECTED TAB.

Note: the parameter key selectedTab is now a reserved parameter name. Similar to a reserved keyword in C#. If you use this in your app as a key, you may experience undesired behavior.

Note: At this time there is no native support for deep linking into a Tab that is a navigation page. Please let me know if you need this functionality.

Dynamic Tab Generation

You can now dynamically create tabs when navigating to a TabbedPage by using the KnownNavigationParameters.CreateTab constant or by using the "createTab" parameter name. _navigationService.NavigateAsync("MyTabbedPage?createTab=ViewA&createTab=ViewB"); This will create a TabbedPage and then create two tabs, ViewA and ViewB. To create a tab that wraps a page in a NavigationPage, simply denote this as a nested hierarchy using the | character. _navigationService.NavigateAsync("MyTabbedPage?createTab=NavigationPage|ViewA");

Remove pages from navigation stack

This feature allows you to remove pages form the navigation stack of a NavigationPage while at the same time navigating to a new page. For each page you wish to remove, prefix your navigation path with ../.

Example Our app requires a user to login in order to edit "User" profile information. This will require the user to be prompted to login and then once successful continue to edit the profile. This leaves us with the following navigation stack:

"NavigationPage/UserList/UserDetails/LoginPage/EditUser"

If we were to hit the back button from the EditUser page, we would be returned to the LoginPage. This is not the desired experience. Instead, we want to go back to the UserDetails which was just updated. To achieve this we provide the following navigation URI from the LoginPage page with a successful login attempt.

NavigationService.NavigateAsync("../EditUser");

This would remove the LoginPage and then immediately navigate to the "EditUser" page which we now have access to.

You can chain the ../ instruction for each page that needs to be removed from the stack.

Given: "NavigationPage/ViewA/ViewB/ViewC/ViewD" Navigate from ViewD with: NavigationService.NavigateAsync("../../../ViewE"); Results in: "NavigationPage/ViewA/ViewE"

Note: This only works when navigating within a NavigationPage! Modal pages are not supported.

You can now control the various segments of a deep ink by setting the useModalNavigation parameter on any specific navigation segment in the URI.

NavigatAsync("NavigationPage/ViewA/ViewB/NavigationPage?useModalNavigation=true/ViewC/ViewD");

You can also use the built-in constant KnownNavigationParameters.UseModalNavigation

NavigatAsync($"NavigationPage/ViewA/ViewB/NavigationPage? {KnownNavigationParameters.UseModalNavigation} =true/ViewC/ViewD");

Note: the parameter key useModalNavigation is now a reserved parameter name. Similar to a reserved keyword in C#. If you use this in your app as a key, you may experience undesired behavior.