Skip to content

Getting Started

Damian edited this page Dec 8, 2022 · 15 revisions

Coming Soon

Until we get our own Visual Studio Template extension completed, it's recommended to use the Avalonia Template to make adding Window and UserControl views easier - VS 2019/2017, VS 2022.

Basic Configuration

Install NuGet Packages

Prism.Avalonia v8.x requires the following Packages to be installed. Currently, only DryIoc is supported with v8.1.97

Package NuGet
Prism.Avalonia Prism.Avalonia NuGet Badge
Prism.DryIoc.Avalonia Prism.DryIoc.Avalonia NuGet Badge

Create Shell

The Main entry point of your Avalonia application does not require changes.

Inside the App class (App.xaml.cs), a few minor changes are needed.

  1. Update your App class to inherit from PrismApplication instead of, Application
  2. Add an Initialize() method and add base.Initialize();
    • base.Initialize(); is required to begin the initialization of Prism.Avalonia
  3. Remove OnFrameworkInitializationCompleted() method if it exists. Prism.Avalonia takes care of this for you.

App.xaml.cs:

using System;
using Avalonia;
using Avalonia.Markup.Xaml;
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Regions;

namespace SampleMvvmApp;

/// <summary>Application entry point.</summary>
public class App : PrismApplication
{
    public override void Initialize()
    {
        AvaloniaXamlLoader.Load(this);

        // Initializes Prism.Avalonia
        base.Initialize();
    }

    /// <summary>User interface entry point, called after Register and ConfigureModules.</summary>
    /// <returns>Startup View.</returns>
    protected override IAvaloniaObject CreateShell()
    {
        // Input your main shell window name
        return Container.Resolve<MainWindow>();
    }
}

Defining a View

Whether it's the shell Window or a UserControl a few base properties must be set in the root element. In an upcoming release, you no longer need to specify the AutoWireViewModel property, as it will be automatically detected.

  • xmlns:prism="http://prismlibrary.com/"
  • prism:ViewModelLocator.AutoWireViewModel="True"
  • x:Class="NAMESPACE.CLASSNAME"

Sample:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:core="clr-namespace:SampleMvvmApp;assembly=SampleMvvmApp"
        xmlns:views="using:SampleMvvmApp.Views"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        x:Class="SampleMvvmApp.Views.MainWindow"
        Title="Sample Application"
        Height="500" Width="700">

Register Views and Services

To register Views and Services for dependency injection and more importantly bindings for views, override the RegisterTypes(IContainerRegistry containerRegistry) method in your App class.

using System;
using Avalonia;
using Avalonia.Markup.Xaml;
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Regions;

namespace SampleMvvmApp;

/// <summary>Application entry point.</summary>
public class App : PrismApplication
{
    public override void Initialize()
    {
        AvaloniaXamlLoader.Load(this);

        // Initializes Prism.Avalonia
        base.Initialize();
    }

    /// <summary>Register Services and Views.</summary>
    /// <param name="containerRegistry"></param>
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        // Services
        containerRegistry.RegisterSingleton<INotificationService, NotificationService>();

        // Views - Region Navigation
        containerRegistry.RegisterForNavigation<DashboardView, DashboardViewModel>();
    }

    /// <summary>User interface entry point, called after Register and ConfigureModules.</summary>
    /// <returns>Startup View.</returns>
    protected override IAvaloniaObject CreateShell()
    {
        // Input your main shell window name
        return Container.Resolve<MainWindow>();
    }

    /// <summary>Called after Initialize.</summary>
    protected override void OnInitialized()
    {
        // Register Views to the Region it will appear in. Don't register them in the ViewModel.
        var regionManager = Container.Resolve<IRegionManager>();

        // Default views for Prism's Regions
        regionManager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(DashboardView));
    }
}

Registering Views for Navigation

In Avalonia, the UserControl is used for your View/Page. To get started, you

PrismApplication Overridable Methods

When your Prism.Avalonia App starts, the following overridable methods are invoked inside your App class in this order:

  1. ConfigureViewModelLocator()
  2. Initialize();
  3. RegisterTypes(IContainerRegistry);
  4. ConfigureModuleCatalog(IModuleCatalog)
  5. RegisterFrameworkExceptionTypes()
  6. CreateShell();
  7. OnInitialized();
Clone this wiki locally