如何将事件的参数传递给ReactiveCommand?

时间:2019-08-19 11:59:34

标签: xamarin.forms reactiveui

我有一个自定义控件,该控件引发带有参数的事件。我可以将命令绑定到事件,但是在命令处理程序参数中始终为null。

这是命令绑定:

this.BindCommand(ViewModel,
    vm => vm.MyCommand,
    v => v.InstanceOfCustomControl,
    toEvent: nameof(MyCustomControl.CustomEvent))
.DisposeWith(d);

这是命令的定义和实现:

MyCommand = ReactiveCommand
    .CreateFromTask<CustomEventArgs, Unit>(MyCommandImpl);

public ReactiveCommand<CustomEventArgs, Unit> MyCommand{ get; set; }
private Task<Unit> MyCommandImpl(CustomEventArgs args)
{
    if (args is null) throw new Exception("WTF?");
}

对于100%的事件,我知道事件离开自定义控件时,它的参数不为null(=包含一个值)。但是它以空值到达反应性命令。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

在这种情况下,应使用Observable.FromEventPattern<CustomEventArgs>而不是BindCommand方法:

Observable.FromEventPattern<CustomEventArgs>(
        InstanceOfCustomControl, 
        nameof(MyCustomControl.CustomEvent))
    .Subscribe(async nxt =>
    {
        await ViewModel.MyCommand.Execute(nxt.EventArgs);
    })
    .DisposeWith(d);