Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ReactiveUI中的ReactiveCommand错误_C#_Viewmodel_Reactiveui_Reactivex - Fatal编程技术网

C# ReactiveUI中的ReactiveCommand错误

C# ReactiveUI中的ReactiveCommand错误,c#,viewmodel,reactiveui,reactivex,C#,Viewmodel,Reactiveui,Reactivex,我将Net40 ReactiveUI与Winforms一起使用,当我有以下内容时,它可以正常工作: public class VMUpdates : ReactiveObject { ... public ReactiveCommand<object> btnClick { get; private set; } public VMUpdates(frmMain frmMain) { ... btnClick =

我将Net40 ReactiveUI与Winforms一起使用,当我有以下内容时,它可以正常工作:

public class VMUpdates : ReactiveObject
{
    ...

    public ReactiveCommand<object> btnClick { get; private set; }


    public VMUpdates(frmMain frmMain)
    {
        ...

        btnClick = ReactiveCommand.Create();
        btnClick.Subscribe(_ => ExecutableMethod());
    }

    private void ExecutableMethod()
    {
        ...
    }
}
public类VMUpdates:ReactiveObject
{
...
公共反应命令btn单击{get;private set;}
公共VMUpdate(frmMain frmMain)
{
...
btnClick=ReactiveCommand.Create();
btnClick.Subscribe(=>ExecutableMethod());
}
私有void ExecutableMethod()
{
...
}
}
这是:

public partial class FrmUpdates : Form, IViewFor<VMUpdates>
{       
   ...
    public FrmUpdates(frmMain)
    {
        ViewModel = new VMUpdates(FrmMain);//Initialise VM
        InitializeComponent();
        ...

        this.BindCommand(ViewModel, vm => vm.btnClick, view => view.btn);
    }

    public VMUpdates ViewModel { get; set; }

    object IViewFor.ViewModel
    {
        get { return ViewModel; }
        set { ViewModel = (VMUpdates)value; }
    }
公共部分类FRMU更新:表单、IViewFor
{       
...
公共信息更新(frmMain)
{
ViewModel=newvmupdates(FrmMain);//初始化虚拟机
初始化组件();
...
这个.bind命令(ViewModel,vm=>vm.btn单击,view=>view.btn);
}
公共VMUpdate视图模型{get;set;}
对象IViewFor.ViewModel
{
获取{return ViewModel;}
设置{ViewModel=(VMUpdates)值;}
}
但是,只要我向一个完全不同的VM添加一个ReactiveCommand,ExecutableMethod方法就不再执行了

public class VMStatus : ReactiveObject
{
    public ReactiveCommand<object> btn2Click { get; private set; }

    public VMStatus()
    {
        btn2Click = ReactiveCommand.Create();
        btn2Click.Subscribe(_ => SomeMethod());
    }

    private void SomeMethod()
    {
        ...
    }
}
公共类VMStatus:ReactiveObject
{
公共反应命令btn2Click{get;private set;}
公共VMStatus()
{
btn2Click=ReactiveCommand.Create();
btn2Click.Subscribe(=>SomeMethod());
}
私有方法()
{
...
}
}
加上

公共部分类frmStatus:Form,IViewFor
{
公共财政状况()
{
ViewModel=new VMStatus();//初始化VM
初始化组件();
...
这个.bind命令(ViewModel,vm=>vm.btn2Click,view=>view.button2);
}
公共VMStatus视图模型{get;set;}
对象IViewFor.ViewModel
{
获取{return ViewModel;}
设置{ViewModel=(VMStatus)值;}
}
}

编辑:当我将语法改为此时,它起作用了:

public ReactiveCommand<Unit> btnClick { get; private set; }

    public VMUpdates(frmMain frmMain)
    {
        ...
        btnClick = ReactiveCommand.CreateAsyncObservable(x => ExecutableMethod());            
    }

    public IObservable<Unit> ExecutableMethod()
    {
        return Observable.Start(() => {
            ...
        });
    }
public ReactiveCommand btn单击{get;private set;}
公共VMUpdate(frmMain frmMain)
{
...
btnClick=ReactiveCommand.CreateAsyncObservable(x=>ExecutableMethod());
}
公共IObservable可执行方法()
{
返回可观察的。开始(()=>{
...
});
}

请将您的解决方案作为答案发布并接受
public ReactiveCommand<Unit> btnClick { get; private set; }

    public VMUpdates(frmMain frmMain)
    {
        ...
        btnClick = ReactiveCommand.CreateAsyncObservable(x => ExecutableMethod());            
    }

    public IObservable<Unit> ExecutableMethod()
    {
        return Observable.Start(() => {
            ...
        });
    }