Sextant.Maui 3.0.1

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

// Install Sextant.Maui as a Cake Tool
#tool nuget:?package=Sextant.Maui&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>

Sextant 是一个基于 ReactiveUI 视图模型导航库

Sextant 是从 Xamvvm 分支出来的,Xamvvm 是一个很好的简单 MVVM 框架,拥有良好的导航系统。问题是,我只是想有一个简单的导航系统来配合 ReactiveUI 使用,不需要任何 MVVM 框架带来的东西。此外,我想让它更“响应式友好”。

然后一个神秘的 Rodney Littles 出现了,他带来了 这篇令人惊叹的文章,作者是 Kent

Sextant 处于非常初级的阶段,正在不断变化,所以请耐心使用... 因为我们会打破一些东西。

这个库实际上就是我“站在巨人的肩膀上”:感谢Kent作为这个项目的最初和真正创造者,我基本上是复制和粘贴了它 😃感谢Geoffrey HuntleyReactiveUI上的维护工作。

NuGet 安装

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

GitHub

预发布包可在 https://nuget.pkg.github.com/reactiveui/index.json 获取。

NuGet

平台 Sextant 包 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 到 View Model。

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");

使用导航服务

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

/// <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 接口公开了可订阅的视图模型生命周期方法。这些方法解包您的参数对象。实现此接口允许您在导航期间向 View Model 分配值。

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);
        }
}

示例

贡献

Sextant 在 OSI 批准的开源许可证下开发,使其可以被免费使用和分发,即使用于商业用途。我们喜欢参与这个项目的人们,并希望你能加入我们——特别是如果你刚刚开始或者以前从未为开源做出过贡献。

因此,为了欢迎你想加入我们的人——这是你可以支持我们的一种方式

产品 兼容和额外的计算目标框架版本。
.NET net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 net8.0-windows10.0.19041 兼容。
兼容目标框架
包含的目标框架(在包中包含)
了解更多关于目标框架.NET Standard的信息。

NuGet包 (1)

显示依赖Sextant.Maui的顶级1个NuGet包

下载
Sextant.Plugins.Popup

一个Xamarin.Forms响应式UI导航库

GitHub仓库

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

版本 下载 最后更新
3.0.1 211 5/27/2024
2.12.162 75 5/26/2024
2.12.120 1,029 1/25/2024
2.12.113 716 12/9/2023
2.12.112 95 12/9/2023