![]() |
VOOZH | about |
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" />Directory.Packages.props
<PackageReference Include="Community.Sextant.WinUI" />Project file
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.1Install as a Cake Addin
#tool nuget:?package=Community.Sextant.WinUI&version=0.6.1Install as a Cake Tool
Community.Sextant.WinUI is a plugin for reactiveui/Sextant: A ReactiveUI navigation library. It adds support for Windows UI Library (WinUI) 3.
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.Splat
Microsoft.Extensions.DependencyInjection:
dotnet add Community.Sextant.WinUI.Microsoft.Extensions.DependencyInjection
NOTE:
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!
SplatIn 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...
}
}
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
}
}
UICommunity.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>
// 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.
// 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.
You can implement INavigationViewAdapter and cover your own use cases easily.
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.
SplatLocator.CurrentMutable
.RegisterViewWinUI(
() => new MyView(),
() => new MyViewModel()
);
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 net6.0-windows10.0.19041 is compatible. net7.0-windows net7.0-windows was computed. net8.0-windows net8.0-windows was computed. net9.0-windows net9.0-windows was computed. net10.0-windows net10.0-windows was computed. |
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. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 0.6.1 | 565 | 2/15/2023 | |
| 0.6.0 | 549 | 2/12/2023 | 0.6.0 is deprecated because it has critical bugs. |
| 0.5.0 | 902 | 2/6/2022 |