问题标签 [reactiveui]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8773 浏览

wpf - ReactiveUI 生产准备好了吗?

我一直在研究在生产代码中使用 Reactive UI 的可行性。一些特性真的很吸引人,但我担心依赖这个库。这些包括:

  1. 古怪的命名和约定。例如,受保护的成员以小写开头,RaiseAndSetIfChanged方法取决于您的私有成员以下划线开头。我知道 Paul Betts(ReactiveUI 的作者)有 Ruby 的背景,所以我猜这就是奇怪命名的来源。然而,这会给我带来一个真正的问题,因为标准命名(根据 Stylecop)在我的项目中被强制执行。即使没有强制执行,我也会担心由此导致的命名不一致。

  2. 缺乏文档/样本。有一些文档和一个孤独的样本。但是,文档只是一系列(旧)博客文章,示例基于库的 V2(现在在 V4 上)。

  3. 奇怪的设计,部分。例如,日志是抽象的,以便不依赖特定的日志框架。很公平。但是,由于我使用 log4net(而不是 NLog),我需要自己的适配器。我认为这将需要我实现IRxUIFullLogger,其中包含大量的方法(超过 50 个)。我原以为更好的方法是定义一个非常简单的接口,然后在 ReactiveUI 中提供扩展方法以促进所有必要的重载。此外,还有IWantsToRegisterStuff一个 NLog 程序集所依赖的奇怪接口,我将无法依赖它(因为它是一个内部接口)。我希望我不需要那个...

    无论如何,我关心的是图书馆的整体设计。有没有人被这个咬过?

  4. 我已经在广泛使用 MVVM Light。我知道 Paul 写了一篇博文,他解释说你可以在技术上同时使用这两种方法,但我更关心的是可维护性。我怀疑将两者混合在一个人的代码库中会令人非常困惑。

有没有人有在生产中使用 Reactive UI 的实践经验?如果是这样,你能减轻或解决我上述的任何担忧吗?

0 投票
1 回答
1679 浏览

wpf - ReactiveUI:从单元测试中测试可观察的属性

RX 官方博客上有这个例子:

我想用reactiveui做这样的事情。我的意思是代替 scheduler.CreateColdObservable(...) 使用来自实际属性更改通知的流。问题是我尝试了 vm.ObservableForProperty 和 vm.Changed 但它们的工作不一致(并非所有属性更改都创建了一个事件或值为 null)

这是我的虚拟机的代码:

理想情况下,我想在这两个属性上使用 Observable.CombineLatest 并创建一个元组并在断言表达式中比较这个元组,就像在第一个示例中一样。

好的结果是:

  1. [OnlyContainingProduct==true;RepoList= 过滤后的]
  2. !将 OnlyContainingProduct 更改为 false
  3. [OnlyContainingProduct==false;RepoList= 整个列表]

*或者这是错误的处理方式?我看到的唯一示例使用了毫秒等实际时间度量,但除了 Throttle 和类似方法外,我看不出它们有什么用处。*

0 投票
2 回答
2435 浏览

c# - 是否有使用 Reactive UI 订阅分层属性更改的模式?

假设我有以下视图模型:

现在假设EmployeeViewModel我想公开一个最新值为 的属性Address.Line

这只会在对Address属性进行更改时打勾,而不是在Line内部Address发生更改时打勾。如果我改为这样做:

这只会Line在当前AddressViewModel发生更改时打勾,但不考虑AddressViewModel完全设置一个新的(也不适应 a null Address)。

我试图用正确的方法解决这个问题。我是 RxUI 的新手,所以我可能会遗漏一些明显的东西。我可以手动挂钩地址更改并设置辅助订阅,但这看起来很丑陋且容易出错。

我应该使用标准模式或助手来实现这一目标吗?

下面是一些可以复制/粘贴的代码来试试这个:

ViewModels.cs

主窗口.cs

MainWindow.xaml

0 投票
3 回答
2697 浏览

wpf - 使用 Reactiveui 订购 observable 集合

我在我的 ViewModel 中订购一个可观察的集合时遇到了一些困难。这是我的情况:

在我的视图模型中,我有以下列表:

此列表使用以下内容填充ReactiveAsyncCommand

到目前为止所有工作。

我有另一个命令,SortByCommand每当用户想要对集合进行排序时都会调用它。该命令如下所示:

该命令还调用一个函数,该函数使用 order by 子句对集合进行排序:

每当sortTickets调用该函数时,都会抛出一个异常,它说:

我有几个问题:

1)为什么我不能直接设置Tickets模型?我是否需要先将结果转换为OrderBy某种可观察的集合?

2)有没有更好的方法来做到这一点?

编辑:澄清

我现在采取的方法是:

  • Tickets集合每 x 秒重置一次。
  • 调用该sortTickets函数后,我将按以下方式排序和重置此集合:

    Tickets = Tickets.OrderBy(c => c.Name).ToList(); //for example

  • 再次Tickets加载集合时,我会检查它是否应该排序,并在设置Tickets属性之前对其进行排序。

这感觉有点 hacky,因为我基本上将集合设置在两个点 - 在加载和排序时。此外,在加载时,我正在使用 ReactiveUI 助手 -> ToProperty:

然而,在排序时,我自己正在这样做:

我想知道是否有更好的方法来使用我在加载时已经使用的 ReactiveUI 方法进行排序。

提前致谢!

0 投票
1 回答
210 浏览

system.reactive - MessageBus 和重放

我试图向 MessageBus 注册一个 observable,它重播发生新订阅时产生的最后一个值

这是行不通的,因为 observable 被包裹在一个 ScheduledSubject 中,它吞下了重播。还有另一种方法吗?

0 投票
1 回答
1014 浏览

reactiveui - ReactiveUI ObservableAsPropertyHelper 抛出无法转换为类型异常

我正在尝试使用 ObservableAsPropertyHelper 来设置只读属性,但无论我尝试什么,我似乎都无法让它按预期工作。

我可以将它提炼成一个测试(使用 ReactiveUI 4.3.2.0、Nunit.Framework 和 Should,全部来自 NuGet)

但这会导致

我可以验证传入的参数

在查看 GitHub 上的源代码后,我可以通过调用

我的代码避免了异常,但也没有通过测试。

我怎样才能避免做错了TM

0 投票
1 回答
1014 浏览

reactiveui - 从 IObservable 填充 ReactiveCollection

刚开始使用 ReactiveUI。我基本上是用查询结果填充网格。我的视图模型目前看起来像这样。

正如您所看到的,我可以在使用 IEnumerable 填充时使其工作,但您可以从注释掉的位中看到,我不太确定从 IObservable 填充的方式。

任何机会有人可以指出我正确的方向,拜托。

编辑:

为了全面披露,我已经包含了 ObservableRows 的实现,以防我在这里犯了错误。

很多谢谢

小号

0 投票
3 回答
1726 浏览

c# - 抑制 C# 中的“成员从未分配给”警告

我有以下代码:

使用 ReactiveUI INPC 支持。编译器总是警告我Trochoid从未分配过并且永远为空。然而,由于RaiseAndSetIfChanged通过CallerMemberName支持执行的魔法,代码确实有效并且编译器是错误的。

如何在我的代码中干净地抑制这些警告?

0 投票
1 回答
4440 浏览

mvvm - 有谁知道 ReactiveUI 的 ReactiveCommand 的一个很好的例子?

我没有经验,尤其是在 MVVM 上,但是尝试使用 ReactiveUI,而且我不理解我发现的演示 ReactiveCommand 的示例。我以前使用过 ICommand / DelegateCommand 一次,但这次有所不同,我没有得到它。

我想做的很简单。单击视图中的一个按钮,并让它在视图模型中执行一个方法。我发现的示例都涉及 IObservable<>,但我不明白,因为它们没有针对我这样的菜鸟进行解释。

基本上,我正在尝试将此作为一种学习体验,而我最理想的做法是将 xaml 中按钮的 Command 属性绑定到一个命令(但它有效,我不知道),这会导致一种方法执行。没有集合,我只是传递一个 int 变量。

谢谢您的帮助。对此,我真的非常感激。

编辑- 下面出现使用 Paul Betts 建议的代码:

C#

XAML

显然我错过了一些东西。我在 AddToDailyUsedExecuted 和 AddToDailyUsedAction 方法处插入了断点,但它们从未到达。

编辑视图后面代码的构造函数:

0 投票
1 回答
2136 浏览

javascript - 流星模板不使用点击事件更新

我正在尝试使用流星会话制作一个反应式菜单(以保持用户的视图)..但它不起作用,Session.get('currentView')被更改(在chrome控制台中测试),但页面不要再次渲染。

.html

客户端.js