Community.Sextant.WinUI
0.6.1
dotnet add package Community.Sextant.WinUI --version 0.6.1
NuGet\Install-Package Community.Sextant.WinUI -Version 0.6.1
<PackageReference Include="Community.Sextant.WinUI" Version="0.6.1" />
<PackageVersion Include="Community.Sextant.WinUI" Version="0.6.1" />
<PackageReference Include="Community.Sextant.WinUI" />
paket add Community.Sextant.WinUI --version 0.6.1
#r "nuget: Community.Sextant.WinUI, 0.6.1"
#:package Community.Sextant.WinUI@0.6.1
#addin nuget:?package=Community.Sextant.WinUI&version=0.6.1
#tool nuget:?package=Community.Sextant.WinUI&version=0.6.1
Community.Sextant.WinUI
Community.Sextant.WinUI is a plugin for reactiveui/Sextant: A ReactiveUI navigation library. It adds support for Windows UI Library (WinUI) 3.
Getting Started
Installation
dotnet add Community.Sextant.WinUI
Depending on whichDependency Injection framework you are using, you can install a different helper package:
reactiveui/splat: Makes things cross-platform:
dotnet add Community.Sextant.WinUI.SplatMicrosoft.Extensions.DependencyInjection:
dotnet add Community.Sextant.WinUI.Microsoft.Extensions.DependencyInjectionNOTE:
Sextantandreactiveuiboth always useSplatbutSplatcan useMicrosoft.Extensions.DependencyInjectionas internal dependency resolver. Please see the Advanced Integration Tutorial of Splat for more details.Your favorite DI: Please create a feature request for it!
Configuration
Using Splat
In your App.xaml.cs:
public partial class App : Application
{
public App()
{
this.InitializeComponent();
Init();
}
/// Add this method and call in the constructor after this.InitializeComponent();
void Init()
{
// Recommended
RxApp.DefaultExceptionHandler = new SextantDefaultExceptionHandler();
Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly());
// Required
Locator.CurrentMutable
.RegisterWinUIViewLocator()
.RegisterParameterViewStackService()
.RegisterViewStackServiceFromParameterService()
.RegisterNavigationView()
.RegisterConstantAnd<IDialogManager>(new DialogManager());
// Will be expanded later...
}
}
Using Microsoft DI:
public partial class App : Application
{
public App()
{
this.InitializeComponent();
Init();
}
// Add this code block
public IServiceProvider? Container { get; private set; }
/// Call this method in the constructor after this.InitializeComponent();
void Init()
{
RxApp.DefaultExceptionHandler = new SextantDefaultExceptionHandler();
var host = Host.CreateDefaultBuilder()
.ConfigureServices(
services =>
{
services.UseMicrosoftDependencyResolver();
var resolver = Locator.CurrentMutable;
resolver.InitializeSplat();
resolver.InitializeReactiveUI();
// Configure our local services and access the host configuration
ConfigureServices(services);
// Configure Sextant, Views and ViewModels
services.UseSextant(
builder =>
{
builder.ConfigureDefaults();
builder.ConfigureViews(
viewBuilder =>
{
// Will be expanded later...
}
);
}
);
}
)
.UseEnvironment(Environments.Development)
.Build();
// Since MS DI container is a different type,
// we need to re-register the built container with Splat again
Container = host.Services;
Container.UseMicrosoftDependencyResolver();
}
void ConfigureServices(IServiceCollection services)
{
// register your other services here
}
}
Connect with your UI
Community.Sextant.WinUI needs to know where to push pages and models to. Typically a Frame Class is used for that. In combination with a NavigationView Class you can create a simple application with dynamic routing.
<div> <table> <tr> <td> <img src="./Assets/Frame.jpg" alt="Frame"> </td> <td> <img src="./Assets/NavView.jpg" alt="Frame and NavigationView"> </td> <td> <img src="./Assets/Adv.jpg" alt="Advanced"> </td> </tr> <tr> <td> A simple Frame only </td> <td> A Frame and NavigationView </td> <td> Integrate any control! </td> </tr> </table> </div>
A simple Frame
// Tell navigation service which <Frame /> to use
// A reference to the containing <Window /> is also needed for Popups.
_navigationService.SetAdapter(new FrameNavigationViewAdapter(MyFrame, MyWindow));
See SextantSample.WinUI.FrameOnly for a simple example.
A Frame and NavigationView
// Tell navigation service which <Frame /> && <NavigationView /> to use
// A reference to the containing <Window /> is also needed for Popups.
_navigationService.SetAdapter(
new NavigationViewAdapter(MyFrame, MyWindow, MyNavigationView)
);
See SextantSample.WinUI.FrameWithNavigationView for an example.
Integrate any control
You can implement INavigationViewAdapter and cover your own use cases easily.
Add your view models
You need to register your Views and ViewModels other Sextant cannot find and create them. This is a separate step from the usual service registration.
Using Splat
Locator.CurrentMutable
.RegisterViewWinUI(
() => new MyView(),
() => new MyViewModel()
);
Using Microsoft DI:
viewBuilder.RegisterViewAndViewModel<
MyView,
MyViewModel
>();
viewBuilder is available in the ConfigureViews call.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0-windows10.0.19041 is compatible. net7.0-windows was computed. net8.0-windows was computed. net9.0-windows was computed. net10.0-windows was computed. |
-
net6.0-windows10.0.19041
- Microsoft.WindowsAppSDK (>= 1.2.230118.102)
- Sextant (>= 2.12.4)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Community.Sextant.WinUI:
| Package | Downloads |
|---|---|
|
Community.Sextant.WinUI.Microsoft.Extensions.DependencyInjection
An adapter for Microsoft.Extensions.DependencyInjection for Community.Sextant.WinUI. |
|
|
Community.Sextant.WinUI.Splat
An adapter for Splat for Community.Sextant.WinUI. |
GitHub repositories
This package is not used by any popular GitHub repositories.