ReactiveUI 是不是提供类似 PRISM ViewModelLocator 的服务?

Posted

技术标签:

【中文标题】ReactiveUI 是不是提供类似 PRISM ViewModelLocator 的服务?【英文标题】:Does ReactiveUI offers PRISM ViewModelLocator like service?ReactiveUI 是否提供类似 PRISM ViewModelLocator 的服务? 【发布时间】:2021-09-11 09:21:08 【问题描述】:

使用 PRISM 框架,我们这样做:

<UserControl x:Class="ProjectName.MyView"
             xmlns:prism="http://prismlibrary.com/"
             prism:ViewModelLocator.AutoWireViewModel="True">
</UserControl>

因此,我们的DataContext 设置了MyViewModel 的实例。

我试图在 ReactiveUI 中找到相同的技术,但我发现的只是这个link。它说您只需要在您的视图模型中实现IActivatableViewModel,并且如果您在视图代码隐藏中有WhenActivated 块,那么实现IViewFor&lt;T&gt; 视图模型就会被激活。

问题:

1)。 “被激活”是什么意思?我希望视图模型是由 ReactiveUI 自动设置的,但是这种行为不会发生,所以看起来我误解了“激活”的实际含义。 2)。 ReactiveUI 是否提供在视图激活时设置视图模型的服务?如果是,请提供代码示例。

【问题讨论】:

ReactiveUI 是基于视图模型的方法。因此,您将创建视图模型,导航将为视图模型创建一个视图。 github.com/reactiveui/ReactiveUI.Samples/tree/main/wpf/…这与棱镜相反,棱镜是视图优先,您创建一个视图,然后它为该视图创建一个视图模型。 【参考方案1】:

“被激活”是什么意思?

激活用于延迟视图模型的设置,直到相应的视图被加载:https://www.reactiveui.net/docs/handbook/when-activated。

我希望视图模型由 ReactiveUI 自动设置...

你的期望是错误的。在 ReactiveUI 中,视图是基于视图模型解析的(与视图使用 Prism 中的视图模型定位器解析视图模型相反)。

ReactiveUI 是否提供在视图激活时设置视图模型的服务?

没有。您应该自己创建视图模型并让 ReactiveUI 解析相应的视图。查看文档中的 Routing section 以获取示例。

【讨论】:

以上是关于ReactiveUI 是不是提供类似 PRISM ViewModelLocator 的服务?的主要内容,如果未能解决你的问题,请参考以下文章

根据是不是选择了 Xamarin CollectionView 项来确定 ReactiveUI 中的 CanExecute

从PRISM开始学WPF导航Navigation?

如何在 Avalonia.ReactiveUI 中使用 Autofac 作为 DI 容器?

我应该如何使用 Avalonia(ReactiveUI) 控制命令的可执行性?

Resharper 为 ReactiveUI 的 ReactiveObject 创建自定义重构

无法将 ReactiveUI 添加到 NUnit 测试项目