- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力研究最近从 6.5.2 更新到 7.0 的 reactiveUI,并且似乎包括一些关于 ReactiveCommand 的重大更改。
EG 这曾经有效:
在 View 模型中:
public ReactiveCommand<Unit> DoLogin;
...
DoLogin = ReactiveCommand.CreateAsyncTask(
async x => {
IsBusy = true;
await Task.Delay(2500);
IsBusy = false;
return Unit.Default;
});
在 View 中:
//bind the command
Observable.FromEventPattern(x => loginButton.Clicked += x, x => loginButton.Clicked -= x)
.Subscribe(args => ViewModel.DoLogin.Execute(null));
//do something after the dologin is complete
this.WhenAnyObservable(x => x.ViewModel.DoLogin)
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe( x => {
DisplayAlert("login complete", "welcome", "OK");
}
);
但现在在 reactiveui 7.0 中,情况有所不同,我不得不进行一些更改,但我无法使其正常工作:
在 View 模型中:
public ReactiveCommand<Unit, Unit> DoLogin;
...
DoLogin = ReactiveCommand.CreateFromTask(
async x => {
IsBusy = true;
await Task.Delay(2500);
IsBusy = false;
return Unit.Default;
});
在 View 中:
//bind the command
Observable.FromEventPattern(x => loginButton.Clicked += x, x => loginButton.Clicked -= x)
.Subscribe(args => ViewModel.DoLogin.Execute());
//do something after the dologin is complete
this.WhenAnyObservable(x => x.ViewModel.DoLogin)
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe( x => {
DisplayAlert("login complete", "welcome", "OK");
}
);
命令代码仍会执行,但 WhenANyObservable Subscribe 部分永远不会触发。它从不显示我的 DisplayAlert。
我正在使用 Xamarin Forms,如果这很重要,但即使在 Windows Forms 中我也会得到相同的行为。
最佳答案
问题是现在 Execute()
是一个冷可观察对象,所以不是调用
ViewModel.DoLogin.Execute()
你必须打电话
ViewModel.DoLogin.Execute().Subscribe()
您可以在 release docs 中阅读有关 ReactiveCommand
更改的更多信息(ctrl+F "ReactiveCommand 更好")
顺便说一句 - 您可以通过在 View 中使用绑定(bind)来代替 Observable.FromEventPattern
让您的生活更轻松。这在 docs about ReactiveCommand 中有描述。 .这样,您将避免在另一个 Subscribe
调用中调用 Subscribe
,这是一种代码味道。代码应该类似于这样:
this.BindCommand(
this.ViewModel,
vm => vm.DoLogin,
v => v.loginButton);
另一个旁注 - ReactiveCommand
将 IsExecuting
公开为一个可观察的属性,因此您可能不需要单独的标志 IsBusy
,
关于xamarin.forms - ReactiveUI 7.0,ReactiveCommand,订阅永远不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40777559/
我已经看到一些关于使用 Observables 而不是带有 async/await 的任务的讨论。我目前几乎只使用 CreateFromTask。我一直在试图理解使用 CreateFromObserv
我有一个使用 ReactiveCommand 的 View 模型: public ReactiveCommand Command { get; } public MyViewModel() {
我正在努力处理一个 ReactiveUI 用例,我觉得它非常简单,必须有“开箱即用”的支持。但是我找不到它。 该场景是具有以下功能的基本搜索界面: 用户在其中输入搜索文本的搜索字符串文本框 显示结果的
我想用command实现textbox的KeyDown事件, 我想让命令可以识别KeyDown事件中的KeyEventArgs之类的键输入并做一些其他事情, 所以我想将命令参数传递给 Reactive
我正在使用 System.Windows.Interactivity 绑定(bind)一个 LoadedCommand,如下所示: 在我的 View 模型中,
我对 ReactiveCommand 处理 ObserveOn 和 SubscribeOn 的方式有疑问。 我有一个返回可观察的字符串序列的 API,它看起来像这样: public IObserva
当执行绑定(bind)到控件的 ReactiveCommand 时,我想将一个参数从我的 View 传递给我的 ViewModel。参数的类型应为 IJcUser 所以我这样定义命令: public
我想在命令执行之前设置忙标志和状态栏文本,并在它完成之后——重置标志和文本。我的工作代码在这里: Cmd = ReactiveCommand.Create(); Cmd.Subscribe(async
我知道如何处理 ReactiveCommand 调用的异步任务抛出的异常但是如何处理任务返回前抛出的异常? 在下面的例子中ThrowAndHandle命令将在执行时从异步任务中抛出异常,并将处理该异常
我有一个基本的 ReactiveCommand。没有异步魔法,只有普通的 ReactiveCommand.Create()。我 Subscribe() 的重载采用异常处理程序,但从未在所述异常处理程序
我订阅了一个命令的 IsExecuting: LoginCommand.IsExecuting.Subscribe(x => Log("Logging in")); 当我的 Command 被 Inv
我有这个 ReactiveCommand; LoadFileCommand = ReactiveCommand.CreateAsyncTask((_, cancellationToken) => Lo
我从一个冷的可观察对象创建了一个 react 命令。调用命令时,它会将 IsExecuting 更改为 true,并将 first emitted value 从 observable 更改回 fal
考虑在 ReactiveUI 中使用继承。我有带有 DoSomethingCommand 的 ViewModel 基类。此命令的“CanExecute”取决于属性 Prop1 public class
我刚刚开始使用 ReactiveUI。我有以下类(class): public class MainViewModel : ReactiveObject, IRoutableViewModel {
我熟悉 MVVM 的概念并使用过 MvvmCross,但我正在尝试 ReactiveUI 并尝试围绕一些概念进行思考。 我正在 WPF 中编写一个工具(可能分支到其他框架)供设计人员创建和编辑数据文件
我的 xaml ( 在此示例中仅显示 2 ) 中有几个 Tiles (TileLayoutControl Class),其可见性绑定(bind)到 bool 属性并通过 BooleanToVisibi
我想知道绑定(bind)到 ReactiveCommand 的 IsExecuting 的推荐方式. 问题是初始命令执行(在构造函数末尾开始)没有使用 IsLoading 更新 WPF 控件。作为绑定
我正在使用 ReactiveUI与 AvaloniaUI并且有一个带有多个 ReactiveCommands 的 ViewModel即扫描、加载和运行。 当 Observable 时调用扫描已更新(当
我缺乏经验,尤其是在 MVVM 方面,但尝试使用 ReactiveUI,并且我不理解我发现的演示 ReactiveCommand 的示例。我以前使用过 ICommand/DelegateCommand
我是一名优秀的程序员,十分优秀!