我如何使用reactui正确显示视图?

时间:2018-07-25 18:47:43

标签: c# mvvm reactiveui

在我的WPF应用程序中,我需要获取基于MyViewModel的View并使用ReactiveUI进行显示,无法弄清楚该怎么做。

这么长的时间就是这样:

ISODate

然后我应该使用一些“路由器”,但这到底是什么?

1 个答案:

答案 0 :(得分:2)

我将使用《 You,I and Reactive UI》一书中的示例。这是GIT存储库https://github.com/kentcb/YouIandReactiveUI

就使用RoutedViewHost WPF控件而言,您可以执行以下操作(您似乎希望根据所提到的内容使用它)

首先,我有某种引导打包程序类,我在这里进行Splat注册。基于此,我将创建一个RoutingState对象。由RoutedViewHost使用。

    protected Bootstrapper()
    {
        RegisterMyDIStuff();
        this.Router = new RoutingState();

        resolver.RegisterConstant<IScreen>(this);

        this
            .Router
            .NavigateAndReset
            .Execute(new StartViewModel())
            .Subscribe()
            .DisposeWith(this.disposable);
    }

    /// <inheritdoc />
    public RoutingState Router { get; }

所有视图必须实现IViewFor接口,并在Splat中注册。例如:             resolver.Register(()=>新的LoginView(),typeof(IViewFor));

在您的XAML文件中声明RoutedViewHost

 <rxui:RoutedViewHost
            x:Name="routedViewHost"
            Grid.Row="1"
            Grid.ColumnSpan="3"/>

然后在您的代码后面查看视图的代码:

public MainWindow()
{
   this.routedViewHost.Router = BootStrapper.Router;
}

然后,您的视图模型必须派生 IRoutableViewModel

    public MainViewModel(IScreen hostScreen = null)
    {
        this.HostScreen = hostScreen ?? Locator.Current.GetService<IScreen>();
    }

    /// <inheritdoc />
    public string UrlPathSegment => "Main";

    /// <inheritdoc />
    public IScreen HostScreen { get; }

然后,当您要导航到另一个ViewModel的视图时,可以:

        await this.HostScreen.Router.NavigateAndReset.Execute(new LogoutViewModel());