Reputation: 41
I'm using Net40 ReactiveUI with Winforms and it works fine when I have just this:
public class VMUpdates : ReactiveObject
{
...
public ReactiveCommand<object> btnClick { get; private set; }
public VMUpdates(frmMain frmMain)
{
...
btnClick = ReactiveCommand.Create();
btnClick.Subscribe(_ => ExecutableMethod());
}
private void ExecutableMethod()
{
...
}
}
and this:
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; }
}
but as soon as I add a ReactiveCommand to a completely different VM, the ExecutableMethod method doesn't execute anymore.
public class VMStatus : ReactiveObject
{
public ReactiveCommand<object> btn2Click { get; private set; }
public VMStatus()
{
btn2Click = ReactiveCommand.Create();
btn2Click.Subscribe(_ => SomeMethod());
}
private void SomeMethod()
{
...
}
}
plus
public partial class frmStatus : Form, IViewFor<VMStatus>
{
public frmStatus()
{
ViewModel = new VMStatus();//Initialise VM
InitializeComponent();
...
this.BindCommand(ViewModel, vm => vm.btn2Click, view => view.button2);
}
public VMStatus ViewModel { get; set; }
object IViewFor.ViewModel
{
get { return ViewModel; }
set { ViewModel = (VMStatus)value; }
}
}
Upvotes: 1
Views: 147
Reputation: 41
Edit: It worked when I changed the syntax to this instead:
public ReactiveCommand<Unit> btnClick { get; private set; }
public VMUpdates(frmMain frmMain)
{
...
btnClick = ReactiveCommand.CreateAsyncObservable(x => ExecutableMethod());
}
public IObservable<Unit> ExecutableMethod()
{
return Observable.Start(() => {
...
});
}
Upvotes: 1