Skip to content

7.2.0.1367

Compare
Choose a tag to compare
@brianlagunas brianlagunas released this 24 Jul 16:56
128328a

Summary

Prism 7.2 represents some major fundamental changes. Be sure to read the release notes in full. In addition to adding several new great API's there are some major breaking changes particularly for Xamarin.Forms developers.

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
  • #1796: Optimize Weak DelegateReference for EventAggregator

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
  • #1754: Fully support bindings for XAML Navigation
  • #1757: Add Automatic View Registration
  • #1806: Removes FastExpressionCompiler for DryIoc due to iOS incompatibility
  • #1814: Adding DialogService
  • #1822: Enhancing Modal Logic to reduce/eliminate need to specify modal navigation when Navigating Back. Enhances Navigation Exception Messaging with new NavigationException class
  • #1842: Fixes reparenting bug for DialogService in XF 4.X on Android with Screen Reader enabled

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|Dialog 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 or DialogParameters. 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
{
    [AutoInitialize(true)
    public string Title { get; set; }

    [AutoInitialize("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
{
}

Using the Dialog Service

The Dialog Service operates by updating the current ContentPage's layout and placing a new View over the top of the existing Content, and then unwinding the changes back to it's original state. This gives the appearance of a Popup similar to what you may see when using Prism.Plugin.Popups but is driven entirely by native Xamarin.Forms.

Custom Alert Custom Dialog
Custom Alert Custom Dialog

The Dialog Service provides for a lot of flexibility and customization to help you produce dialogs that look and feel like they belong in your app. This includes an ability to shift the position, change the mask color or provide an entire custom mask layer.

To Start you simply need to implement IDialogAware, and raise the RequestClose event when you are ready to close the dialog.

public class DemoDialogViewModel : BindableBase, IDialogAware, IAutoInitialize
{
    public DemoDialogViewModel()
    {
        CloseCommand = new DelegateCommand(() => RequestClose(null));
    }

    private string title = "Message";
    public string Title
    {
        get => title;
        set => SetProperty(ref title, value);
    }

    private string message;
    [AutoInitialize(true)] // Makes Message parameter required
    public string Message
    {
        get => message;
        set => SetProperty(ref message, value);
    }

    public DelegateCommand CloseCommand { get; }

    public event Action<IDialogParameters> RequestClose;

    public bool CanCloseDialog() => true;

    public void OnDialogClosed()
    {
        Console.WriteLine("The Demo Dialog has been closed...");
    }

    public void OnDialogOpened(IDialogParameters parameters)
    {
        // No need to do anything as IAutoInitialize will take care of what we need here...
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<Grid xmlns="http://xamarin.com/schemas/2014/forms"
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
      xmlns:prism="http://prismlibrary.com"
      prism:ViewModelLocator.AutowireViewModel="True"
      prism:DialogLayout.RelativeWidthRequest="{OnIdiom Default=0.75, Desktop=0.5}"
      BackgroundColor="White"
      x:Class="HelloWorld.Views.DemoDialog">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <BoxView Color="Black" />
    <Label Text="{Binding Title}"
           Style="{DynamicResource TitleStyle}"
           Margin="20,5"
           TextColor="White" />

    <Label Text="{Binding Message}"
           Margin="20,0,20,10"
           Grid.Row="1" />

    <Button Text="Ok"
            Command="{Binding CloseCommand}"
            HorizontalOptions="Center"
            Margin="0,0,0,10"
            Grid.Row="2"/>
</Grid>

With your View and ViewModel created you now need to register the Dialog to use it. This can be registered in your App.xaml.cs or in a Module.

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

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
  • #1732: Updated .NET Core 3 DirectoryModuleCatalog
  • #1796: WeakDelegatesManager::RemoveListener performance
  • #1805: Attached RegionManager to Dialog by default
  • #1826: Using Enum for IDialogResult.Result

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 UserControl 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)
    {
        ButtonResult result = ButtonResult.None;

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

        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 == ButtonResult.None)
               Title = "Result is None";
           else if (r.Result == ButtonResult.OK)
               Title = "Result is OK";
           else if (r.Result == ButtonResult.Cancel)
               Title = "Result is Cancel";
           else
               Title = "I Don't know what you did!?";
    });
}

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 DialogServiceExtensions
{
    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 == ButtonResult.None)
            Title = "Result is None";
        else if (r.Result == ButtonResult.OK)
            Title = "Result is OK";
        else if (r.Result == ButtonResult.Cancel)
            Title = "Result is Cancel";
        else
            Title = "I Don't know what you did!?";
});

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

Changes:

See more
  • be326d0 fix for Android SDK bug with Azure Pipelines
  • f141c2f fixing presentation issues & allow exclusion of Mask layer
  • 94de081 Fix reparenting issue
  • 2c195c2 add CloseOnBackgroundTapped property
  • fef2e42 Partial views changes
  • d9c170f adding assembly outputs
  • 9221073 remove working directory
  • 941897f Merge pull request #1829 from PrismLibrary/modal
  • 2cfed95 fixing GitHub release
  • 8695396 fixing tests for unregistered View
  • 7b0e1a4 Enhance Modal & Exception handling. fixes #1822
  • f4ff482 adding SelectTabExtension
  • 3856412 fixing returned value
  • 355e130 remove unnecessary references
  • b885ff5 Merge pull request #1825 from PrismLibrary/dialogservice
  • a2b2d34 Unify Xaml Parameters for Dialogs and Navigation
  • 6596ebf adding ParameterBase
  • 4048484 removing dependency on NavigationParameter
  • e811939 add ItemsSource
  • 6fb6998 OnNavigatingTo
  • 75d6db5 Refactoring for better code sharing between Navigation and Dialog Parameters
  • fe5847b downgrade to Xamarin.Forms 3.6 for added compatibility
  • f76990b Merge pull request #1828 from PrismLibrary/core3-directorymodulecatalog
  • 192735c Update DirectoryModuleCatalog.Core.cs
  • 906583a add outputs for NavigationInterfaces
  • d301c7d reset IsDialogHost property
  • 24e54a1 add ability to provide custom mask (i.e. gradient layer)
  • 1a49f73 fixing background tap dismissal
  • c20beae adding DialogService fixes #1814
  • b4fb6c1 Merge pull request #1827 from PrismLibrary/xamlnav
  • 8422312 Fully support bindings for Xaml Navigation fixes #1754
  • aee7c10 Merge pull request #1826 from PrismLibrary/dialog-service-updates
  • f124ac5 Update azure-pipelines.yml
  • 33585f7 updated piplines
  • f288e18 removed setter from title
  • 6f59946 Using Enum for Result
  • 1cc5f34 Merge branch 'master' into core3-directorymodulecatalog
  • 428df87 Merge pull request #1815 from hronlukas/master
  • 4551d9c Merge pull request #1817 from mcavigelli/documentation-fixes
  • cb41ff2 update deprecated build property
  • 5547afc disable Forms Sandbox
  • 56994a4 update Build Badges
  • d4a7406 ensure global.json is in Sandbox directory
  • 6eda879 fixing sandbox build options
  • 80b0aaf fixing job name
  • a1a0df6 consolidating Xamarin.Forms dependency
  • 59a0fa4 Removed unused usings.
  • 581e9d3 Tiny documentation fix.
  • c036953 Typo
  • c4fa2f0 Do not override owner in DialogService
  • 15588d0 update issue templates
  • fdf1635 Update SourceLink
  • 4f166f5 update for Multi-Stage Pipeline
  • 4e335f8 removed RegionManager from dialogservice
  • 3367c5a update readme plugins and training
  • f426e11 add AutoRegistrationViewNameProvider
  • da1fe79 Merge pull request #1808 from PrismLibrary/dryioc-ios
  • 418b52a fixes #1806
  • 81ea86c remove RegisterForNavigationAttribute provide handler for allowing custom logic on AutoRegistering Views
  • 792bd65 Dependency updates
  • eccb6e3 Merge pull request #1793 from hermestobias/master
  • 381d56c Merge pull request #1807 from PrismLibrary/IDialogService-Updates
  • 7f5b2e1 attached RegionManager to dialog by default
  • 805eca4 working on .NET Core 3 module catalog
  • 0b589ce Merge pull request #1803 from noufionline/patch-2
  • 7c0e303 Update IDialogService.cs
  • ff9641a Merge pull request #1798 from PrismLibrary/unity-upgrade
  • d294912 updated Prism.Forms
  • c794528 updated Prism.WPF to altest version of Unity
  • 2aa53df Adhere to code style guidelines
  • 886ffcf 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.
  • d5569a5 Merge pull request #1780 from PrismLibrary/automatic-registration
  • 5c11a75 rename registration attribute to align with the AutoLoad API as AutoRegisterForNavigation
  • ae667e7 Merge pull request #1779 from PrismLibrary/IInitialize
  • d654987 update from OnInitialized -> Initialize
  • 3c175ab Updating DryIoc, Xamarin Forms & Test SDK
  • 170307e Adds support for View Registration by Attribute or automatic View Registration.
  • 2dbdd04 Implementing IInitialize fixes #1746 fixes #1748
  • eb49282 migrate Navigation back to Prism Forms
  • a1d383d Merge pull request #1761 from PrismLibrary/IDialogService-Updates
  • b5a43fd fixed ninject project
  • c95d6cf Refactored DialogWindow attached properties
  • 2507daf Merge pull request #1749 from PrismLibrary/IDialogService-Updates
  • 273eab2 Merge branch 'master' into IDialogService-Updates
  • 36f8d81 removed dialog VM base class
  • 6d23d45 removing UWP
  • 9623596 Merge pull request #1731 from bartlannoeye/Cleanup
  • b6c9ab6 Cleanup project files
  • c0d9ed6 Merge pull request #1730 from PrismLibrary/forms36
  • 6e1aa89 removing netstandard1.0
  • c139004 moving Android DependencyResolver to PrismApplicationBase
  • a2bd997 updating Xamarin Forms and DryIoc
  • 5111104 Merge pull request #1722 from PrismLibrary/IDialogService-Updates
  • e8effd4 removed Icon property
  • 2d68c0f Merge pull request #1721 from PrismLibrary/IDialogService-Updates
  • a6c8e84 added RegisterDialog method without VM requirement
  • 6494cf4 added support to control DialogWindow from style
  • 04cc589 Merge pull request #1714 from noufionline/patch-2
  • c14d28d Update DialogService.cs
  • d476877 Merge pull request #1709 from PrismLibrary/WPF-IDestructible
  • df7414c added support for IDestructible
  • 982d21f fixing release notes
  • a9e22df Merge pull request #1705 from PrismLibrary/fluent-containerregistry [ #1677 ]
  • 45f6a18 Fluent API for IContainerRegistry fixes #1677
  • a041c7f Merge pull request #1704 from PrismLibrary/forms-updates
  • cc74034 update Xamarin.Forms
  • dec906e make NavigationExtension bindable
  • 336a405 removing unneeded extensions
  • 779a290 Merge pull request #1703 from PrismLibrary/uwp-simplifications
  • f50bcdb PrismApplication simplification
  • 2109273 Merge pull request #1702 from PrismLibrary/PlatformSpecificViewRegistration
  • c8f208f fixes #1700 Platform specific Views not registered
  • 8e22c9f Adding tests for Idiom and Platform specific View registrations
  • 508b5c8 Merge pull request #1685 from PrismLibrary/uwp-di
  • 9aaec2f Merge pull request #1684 from bares43/feature/XamlNavigationAnimated
  • fac1d29 FrameFacade DI fixes
  • f35fd65 fixing naming
  • 2b503a2 updating Sandbox app to follow better MVVM patterns
  • ab1b6ad simplify startup
  • 6e81769 force use of Microsoft.NETCore.UniversalWindowsPlatform 6.1.9 due to 6.2.X being unlisted from NuGet
  • fd2d1d2 call SetAsWindowContent by default
  • d9d8782 dependency injection refactoring of UWP
  • bc2de79 adding named service Resolve with parameters
  • 55d5d45 xaml nav UseModalNavigation
  • 4caf26b xamarin forms xaml navigation animated
  • 388d709 Merge pull request #1682 from PrismLibrary/Interactivity-Improvements
  • 0b64623 added close dialog command to DialogViewModelBase
  • 4403abb Merge pull request #1680 from omerfarukz/master
  • 6aa4b17 Merge pull request #1681 from PrismLibrary/buildupdates
  • ed97ac3 simplify versioning
  • 33c3a48 use preview1
  • 1571d33 package updates
  • 6b05672 force use of latest netcore 3 sdk
  • e9136c3 added support for new dialog service to bootstrappers
  • e9e27fb fixing release URL
  • 62c3839 added obsolete attributes
  • be17628 did some refactoring
  • ae37468 rollback MSBuild.Sdk.Extras
  • fa3eb5f update Patreon & Container notices
  • 53de9b5 simplify build versioning
  • e878056 set Release Url as part of build
  • 664b08c updating build resources
  • 26c1832 Changed property observer to use property info instead of property name
  • e7cecd0 Merge pull request #1669 from PrismLibrary/api-enhancements
  • 6506daf adding Tuple Navigation
  • 3c1fdb3 add Cancel/Destroy buttons that have no action
  • b55b967 Merge pull request #1668 from PrismLibrary/iocabstractions
  • a45d5bb Cleaning up API's
  • 531a969 adding resolve with parameters
  • f7e3624 Adding overloads for named instances
  • 5afe1cd expands IoC abstractions fixes #1654
  • b9fb480 consolidate forms reference
  • 00acd99 package updates
  • 9acdecd playing around with the dialog API
  • 32781cd Merge pull request #1665 from muhaym/patch-1
  • e2db76a Navigate Async Documentation fix
  • 457c725 initial attempt at a new dialog service
  • 7baeb32 Merge pull request #1663 from PrismLibrary/PlatformNav-Refactor
  • 753fe5a Refactored platform navigation methods
  • 802ea9f Merge pull request #1662 from PrismLibrary/EventBase-Revert
  • 57ad662 Reverted
  • 9399b9d Merge pull request #1658 from Anapher/master_fixDelegateCommandTypo
  • d627f73 Fix typo in documentation of DelegateCommand
  • 7e18e8a Merge pull request #1653 from cr1mp/patch-1
  • 1c2393a Update NavigationExtensionBase.cs
  • c33241a Merge pull request #1651 from PrismLibrary/core3-sdk
  • bf1ee21 use public preview for .NET Core 3
  • 34e8042 Merge pull request #1650 from PrismLibrary/build-xf-update
  • db63810 build updates
  • af7f8d8 adding missing XmlnsDefinition
  • bee0480 Merge pull request #1643 from PrismLibrary/Bug1638-IModuleCatalog
  • 37c23d9 registered the container extension
  • c9b38d9 add XmlnsDefinition
  • df68a49 update Unity & SourceLink
  • 136bb1e Merge pull request #1630 from MikelThief/master
  • eba378f Fixing view discovery for Unity for UWP
  • dff0050 Fixing view discovery for DryIoc for UWP
  • fd8cf68 updated WPF projects to build 9754 of core 3
  • 930e2b0 fixed #1625
  • 21cf084 Merge pull request #1617 from PrismLibrary/tabbednavigation
  • b0ad436 eliminate poptoroot
  • 0f337f1 refactoring Tab Navigation to be consistent with other Navigation API's
  • 40febb8 Merge pull request #1616 from PrismLibrary/TabSwitching
  • 2ee14f2 added SelectTab extension method for tabbedpages
  • 086759d Merge pull request #1609 from PrismLibrary/netcore3-support
  • 871ca50 rerun failed tests
  • de6ad67 update authors
  • 9b643d9 install latest .netcore 3 sdk
  • 8600c4d added .NET Core 3 support
  • dc2ad6e updated DryIoc tests
  • b00db55 Merge pull request #1607 from PrismLibrary/versionbump
  • b4d2d18 ignore tests for deprecated Container
  • c6e399e bump for Prism 7.2
  • e3f6569 removing Autofac
  • 0197d31 Merge pull request #1606 from PrismLibrary/upgrade-tests
  • 2a5e4e6 added debug directive to test
  • cfa7c7c updated xamarin tests
  • a58bdbb fixed service locator tests
  • 76ea1b6 updating more tests
  • 2b3c91f fixed all compile errors
  • 9e283c1 Merge pull request #1604 from bartlannoeye/master
  • 1f5a0fe Revert unstable install SDK script
  • fae5236 Merge pull request #1602 from dro123/master [ #1601 ]
  • dfcf1e1 Always call InitializeModules() in PrismApplicationBase even without a shell (#1601)
  • 7b6b453 Don't crash in PrismApplicationBase.OnInitialized() if MainWindow is null
  • 84d21aa Merge pull request #1600 from bartlannoeye/AzureDevOps4UWP
  • 7d088c5 One letter too much
  • f364c2b Rename install-uwp-sdk_yml.yaml to install-uwp-sdk.yaml
  • 7c85432 Moved step yaml file in correct folder
  • b07cdf5 Call installing UWP SDK, remove devops trigger
  • 197898d Add the Install Windows SDK powershell script
  • c4711a4 Merge pull request #1597 from bartlannoeye/UWPv7
  • 5521a0c Corrected default namespace for Prism.Unity.Windows
  • be5c45a Removed unused usings in UWP libraries
  • 09c4c32 Merge pull request #1594 from Windows-XAML/master
  • 3725fda Allowing for Fluent if they want it.
  • 8314c7f Accepting update
  • 97ec752 Correcting incorrect return type.
  • 7c2f7a4 Correcting incorrect return type.
  • fbb32f5 Merge pull request #1592 from PrismLibrary/Issue-1589 [ #1589 ]
  • 444bc5d fixed #1589
  • bb7365c Merge pull request #1587 from Seikilos/patch-1
  • 5c4e6ae Fixed myget urls
  • ab96ab8 Merge pull request #1563 from Windows-XAML/master
  • f555463 Returning the internface in Core, but enabling Remove() in Windows.
  • ffe20a3 Removing ViewModelBase, I can add it to Template10.Extras
  • db3f4c1 We're now caching the Frame.CurrentParameters in the FrameFacade so that when the user Refereshes, the operation has a reference to the parameter.
  • 5453d90 The Gestures enum is/was redundant to the Gesture enum.
  • 5d78bb4 Merge branch 'master' of https://github.com/Windows-XAML/Prism into cherry-branch
  • 2dce50b Merge pull request #1 from PrismLibrary/master
  • 32fcbdd Adding some extra logging after SetAutowireViewModel();

This list of changes was auto generated.