C# ReactiveUI中的ReactiveCommand错误
我将Net40 ReactiveUI与Winforms一起使用,当我有以下内容时,它可以正常工作: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 =
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(() => {
...
});
}