-
Notifications
You must be signed in to change notification settings - Fork 45
Getting Started
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.
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.DryIoc.Avalonia |
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.
- Update your
App
class to inherit fromPrismApplication
instead of,Application
- Add an
Initialize()
method and addbase.Initialize();
-
base.Initialize();
is required to begin the initialization of Prism.Avalonia
-
- 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>();
}
}
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">
To register **Views ** and Services for dependency injection and more importantly data bindings for Views, override the RegisterTypes(IContainerRegistry containerRegistry)
method in your App
class.
Sample:
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<ILogService, LogService>();
// 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));
}
}
In Avalonia, the UserControl
is used for your View/Page. To get started, you
App.xaml.cs
/// <summary>Register Services and Views.</summary>
/// <param name="containerRegistry"></param>
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
...
// Views - Region Navigation
containerRegistry.RegisterForNavigation<DashboardView, DashboardViewModel>();
}
DashboardViewModel.axaml
When your Prism.Avalonia App
starts, the following overridable methods are invoked inside your App
class in this order:
ConfigureViewModelLocator()
Initialize();
RegisterTypes(IContainerRegistry);
ConfigureModuleCatalog(IModuleCatalog)
RegisterFrameworkExceptionTypes()
CreateShell();
OnInitialized();