Sextant.XamForms 2.12.162

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

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

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 由 nice and simple MVVM 框架 Xamvvm 的一个分支开发而来,它具有优秀的导航系统。问题是,我只是想使用简单的导航系统,结合 ReactiveUI,而不需要 MVVM 框架中附带的所有功能。此外,我还想让它更加“Reactive 亲和”。

然后出现了一个疯狂的Rodney Littles,以及他的一个实现,即这个惊人的帖子,作者是Kent

Sextant 处于一个非常初期的阶段,并且正在不断变化,因此请对我们的使用保持耐心...因为我们可能会出错。

这个库只不过是我“站在巨人的肩膀上”:Kent 是这个项目的原创和真正创造者,我基本上就是复制粘贴了 😃 Geoffrey Huntley 维护 ReactiveUI

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 版本增加了针对 IMutableDependencyResolver 的新扩展方法,允许您将 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");

使用导航服务

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

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

示例

贡献

Sextant 在 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 包 (1)

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

下载
Pradana.ReactiveUI.XamForms

Opiniated Commons Library For ReactiveUI.XamForms

GitHub 代码库 (2)

显示依赖 Sextant.XamForms 的顶级 2 个流行 GitHub 代码库

代码库 星星
reactiveui/ReactiveUI.Samples
此代码库包含 ReactiveUI 样本。
TheEightBot/Reactive-Examples
使用 Reactive Extensions 和 Reactive UI 的样本应用程序
版本 下载 最后更新
2.12.162 127 5/26/2024
2.12.120 470 1/25/2024
2.12.113 250 12/9/2023
2.12.112 113 12/9/2023
2.12.4 11,670 5/19/2021
2.12.3 337 5/18/2021
2.11.1 12,474 2/28/2021
2.10.1 7,025 1/22/2021
2.9.5 547 12/31/2020
2.9.4 433 12/28/2020
2.9.1 2,357 12/16/2020
2.8.1 708 11/5/2020
2.7.1 2,884 6/6/2020
2.6.1 577 5/8/2020
2.5.8 830 3/5/2020
2.5.1 934 1/6/2020
2.4.1 507 12/12/2019
2.3.9 511 12/5/2019
2.3.7 457 11/28/2019
2.3.1 482 11/21/2019
2.2.2 3,344 9/16/2019
2.2.1 491 9/6/2019
2.1.1 608 8/28/2019
2.0.6 469 8/24/2019
2.0.1 1,042 7/26/2019