Sextant.Avalonia 3.0.1

前缀已预留
dotnet add package Sextant.Avalonia --version 3.0.1                
NuGet\Install-Package Sextant.Avalonia -Version 3.0.1                
该命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块版本的 Install-Package
<PackageReference Include="Sextant.Avalonia" Version="3.0.1" />                
对于支持 包引用 的项目,将此 XML 节点复制到项目文件中以便引用代码包。
paket add Sextant.Avalonia --version 3.0.1                
#r "nuget: Sextant.Avalonia, 3.0.1"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此内容复制到交互式工具或脚本源代码中以引用代码包。
// Install Sextant.Avalonia as a Cake Addin
#addin nuget:?package=Sextant.Avalonia&version=3.0.1

// Install Sextant.Avalonia as a Cake Tool
#tool nuget:?package=Sextant.Avalonia&version=3.0.1                

Sextant

NuGet Stats Build Code Coverage alternate text is missing from this package README image alternate text is missing from this package README image

<p align="left"><img src="https://github.com/reactiveui/styleguide/blob/master/logo_sextant/vertical.png?raw=true" alt="Sextant" height="180px"></p>

基于 ReactiveUI 的视图模型导航库

Sextant 是从 Xamvvm 分支出来的,它是一个好用且简单的 MVVM 框架,具有优秀的导航系统。问题是,我只是想使用一个简单的导航系统与 ReactiveUI 结合使用,而不需要 MVVM 框架的所有功能。而且,我想让它更加“与 ReactiveUI 友好”。

然后出现了狂野的 Rodney Littles,并且带来了一篇令人惊叹的文章,作者是 Kent

六分仪仍处于非常初级阶段,并且处于不断变化中,所以请耐心使用...因为我们会出错。

这个库无非是我“站在巨人的肩膀上”:感谢Kent作为这个库的原始和真正的创造者,我大多数时间都是在复制粘贴 😃 Geoffrey Huntley是维护者在ReactiveUI上。

NuGet安装

在您的Forms项目和ViewModels项目上安装NuGet包。

GitHub

预发布包可在https://nuget.pkg.github.com/reactiveui/index.json找到

NuGet

平台 六分仪包 NuGet
UWP Sextant CoreBadge
Xamarin.Forms Sextant.XamForms XamBadge
Xamarin.Forms Sextant.Plugins.Popup PopupBadge
Xamarin.iOS Sextant CoreBadge
Avalonia Sextant.Avalonia CoreBadge

目标平台版本

核实您有目标平台(例如Android、iOS、Tizen)的最低版本。

注册组件

视图

2.0版本为IMutableDepedencyResolver添加了新的扩展方法,允许您将IViewFor注册到视图中。

Locator
    .CurrentMutable
    .RegisterNavigationView(() => new NavigationView(RxApp.MainThreadScheduler, RxApp.TaskpoolScheduler, ViewLocator.Current))
    .RegisterParameterViewStackService()
    .RegisterViewForNavigation(() => new PassPage(), () => new PassViewModel())
    .RegisterViewForNavigation(() => new ReceivedPage(), () => new ReceivedViewModel());

设置初始页面

Locator
    .Current
    .GetService<IParameterViewStackService>()
    .PushPage<PassViewModel>()
    .Subscribe();

MainPage = Locator.Current.GetNavigationView("NavigationView");

使用导航服务

之后,您只需要在ViewModel中调用其中的一个方法即可。

/// <summary>
/// Pops the <see cref="IPageViewModel"/> off the stack.
/// </summary>
/// <param name="animate">if set to <c>true</c> [animate].</param>
/// <returns></returns>
IObservable<Unit> PopModal(bool animate = true);

/// <summary>
/// Pops the <see cref="IPageViewModel"/> off the stack.
/// </summary>
/// <param name="animate">if set to <c>true</c> [animate].</param>
/// <returns></returns>
IObservable<Unit> PopPage(bool animate = true);

/// <summary>
/// Pushes the <see cref="IPageViewModel"/> onto the stack.
/// </summary>
/// <param name="modal">The modal.</param>
/// <param name="contract">The contract.</param>
/// <returns></returns>
IObservable<Unit> PushModal(IPageViewModel modal, string contract = null);

/// <summary>
/// Pushes the <see cref="IPageViewModel"/> onto the stack.
/// </summary>
/// <param name="page">The page.</param>
/// <param name="contract">The contract.</param>
/// <param name="resetStack">if set to <c>true</c> [reset stack].</param>
/// <param name="animate">if set to <c>true</c> [animate].</param>
/// <returns></returns>
IObservable<Unit> PushPage(IPageViewModel page, string contract = null, bool resetStack = false, bool animate = true);

示例

public class ViewModel
{
    private readonly IViewStackServicen _viewStackService; // or IParameterViewStackServicen

    public ViewModel(IViewStackServicen viewStackService)
    {
        _viewStackService = viewStackService;

        OpenModal = ReactiveCommand
            // FirstModalViewModel must implement IViewModel or INavigable
            .CreateFromObservable(() => viewStackService.PushModal<FirstModalViewModel>(),
                outputScheduler: RxApp.MainThreadScheduler);
    }

    public ReactiveCommand<Unit, Unit> OpenModal { get; }
}

传递参数

2.0版本添加了对在导航时传递参数的支持。

示例

public class ViewModel
{
    private readonly IParameterViewStackServicen _viewStackService;

    public ViewModel(IParameterViewStackServicen viewStackService)
    {
        _viewStackService = viewStackService;

        Navigate = ReactiveCommand
            // NavigableViewModel must implement INavigable
            .CreateFromObservable(() => viewStackService.PushModal<NavigableViewModel>(new NavigationParameter { { "parameter", parameter } }),
                outputScheduler: RxApp.MainThreadScheduler);
    }

    public ReactiveCommand<Unit, Unit> Navigate { get; }
}

INavigable接口公开了可以订阅的视图模型生命周期方法。这些方法移除了您的参数对象。实现该接口允许您在导航期间对视图模型赋值。

public class NavigableViewModel : INavigable
{
        public string? _parameter;

        public IObservable<Unit> WhenNavigatedFrom(INavigationParameter parameter)
        {
            return Observable.Return(Unit.Default)
        }

        public IObservable<Unit> WhenNavigatedTo(INavigationParameter parameter)
        {
            parameter.TryGetValue("parameter", out _parameter);
            return Observable.Return(Unit.Default);
        }

        public IObservable<Unit> WhenNavigatingTo(INavigationParameter parameter)
        {
            return Observable.Return(Unit.Default);
        }
}

示例

贡献

六分仪在OSI批准的开源许可证下开发,使其可以自由使用和分发,即使用于商业用途。我们 ❤ 参与这个项目的人,我们愿意让您加入我们,尤其是如果您刚刚开始或以前从未为开源做出过贡献。

所以,亲爱的想要加入我们的人——这就是您如何支持我们的方法

产品 兼容的和额外的目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包

此包未被任何 NuGet 包使用。

GitHub 仓库

此包未被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
3.0.1 73 5/27/2024
2.12.162 62 5/26/2024
2.12.120 130 1/25/2024
2.12.113 169 12/9/2023
2.12.112 102 12/9/2023
2.11.1 596 2/28/2021