在我的WPF应用程序中,我需要获取基于MyViewModel的View并使用ReactiveUI进行显示,无法弄清楚该怎么做。
这么长的时间就是这样:
ISODate
然后我应该使用一些“路由器”,但这到底是什么?
答案 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());