ReactiveUI 7.0 交互处理程序从未调用过
ReactiveUI 7.0 interaction handler never called
所以,我正在学习将 ReactiveUI 7.4 与 winforms 一起使用,我认为在我尝试包含 Interactions 以显示错误弹出窗口之前,我对它有很好的体验:
ViewModel
public class ViewModel : ReactiveObject
{
[...]
public ViewModel()
{
GetCmd = ReactiveCommand.CreateFromTask(
_ => myAsyncFunc(),
CanGetCmd
);
GetCmd.ThrownExceptions
.Subscribe(ex => Interactions.Errors.Handle(ex)); <- breakpoint correctly breaks in there
}
}
互动次数
public static class Interactions
{
public static readonly Interaction<Exception, Unit> Errors = new Interaction<Exception, Unit>();
}
查看
public ViewCtor()
{
[viewmodel declaration...]
this.btnGet.Events().Click
.Select(_ => Unit.Default)
.InvokeCommand(this, x => x.ViewModel.GetCmd);
Interactions.Errors.RegisterHandler(interaction =>
{
_popupManager.Show(interaction.Input.Message, "Arf !"); <- but breakpoint never hits here :(
});
}
基本上在调试中,断点在 Handle 声明中命中,但从未在 RegisterHandler 函数中命中。
我可能遗漏了一些东西,因为在 interactions 上的 ReactiveUI 文档中,如果我没有设置任何 RegisterHandler(我试过了),我应该会得到一个 UnhandledInteractionException 并且我什至没有得到这个异常。 .
如果给定交互没有处理程序,或者 none 个处理程序设置了结果,则交互本身被视为未处理。在这种情况下,调用 Handle 将导致抛出 UnhandledInteractionException。
(我也在使用 reactiveui-events-winforms 来更好地连接事件语法)
Interactions.Errors.Handle(ex)
returns 一个冷的 observable,即在您订阅它之前它实际上不会做任何事情。这应该有效:
GetCmd.ThrownExceptions
.Subscribe(ex => Interactions.Errors.Handle(ex).Subscribe());
(您可能需要添加 using System;
。)
所以,我正在学习将 ReactiveUI 7.4 与 winforms 一起使用,我认为在我尝试包含 Interactions 以显示错误弹出窗口之前,我对它有很好的体验:
ViewModel
public class ViewModel : ReactiveObject
{
[...]
public ViewModel()
{
GetCmd = ReactiveCommand.CreateFromTask(
_ => myAsyncFunc(),
CanGetCmd
);
GetCmd.ThrownExceptions
.Subscribe(ex => Interactions.Errors.Handle(ex)); <- breakpoint correctly breaks in there
}
}
互动次数
public static class Interactions
{
public static readonly Interaction<Exception, Unit> Errors = new Interaction<Exception, Unit>();
}
查看
public ViewCtor()
{
[viewmodel declaration...]
this.btnGet.Events().Click
.Select(_ => Unit.Default)
.InvokeCommand(this, x => x.ViewModel.GetCmd);
Interactions.Errors.RegisterHandler(interaction =>
{
_popupManager.Show(interaction.Input.Message, "Arf !"); <- but breakpoint never hits here :(
});
}
基本上在调试中,断点在 Handle 声明中命中,但从未在 RegisterHandler 函数中命中。
我可能遗漏了一些东西,因为在 interactions 上的 ReactiveUI 文档中,如果我没有设置任何 RegisterHandler(我试过了),我应该会得到一个 UnhandledInteractionException 并且我什至没有得到这个异常。 .
如果给定交互没有处理程序,或者 none 个处理程序设置了结果,则交互本身被视为未处理。在这种情况下,调用 Handle 将导致抛出 UnhandledInteractionException。
(我也在使用 reactiveui-events-winforms 来更好地连接事件语法)
Interactions.Errors.Handle(ex)
returns 一个冷的 observable,即在您订阅它之前它实际上不会做任何事情。这应该有效:
GetCmd.ThrownExceptions
.Subscribe(ex => Interactions.Errors.Handle(ex).Subscribe());
(您可能需要添加 using System;
。)