ReactiveUI 同步 ReactiveCommand 调用原因 System.InvalidOperationException

ReactiveUI sync ReactiveCommand invocation cause System.InvalidOperationException

我尝试将简单的同步命令与 Reactive 绑定UI。

public ICommand ClickCommand { get; set; }

public bool IsClicked;

public MainViewModel()
{
    ClickCommand = ReactiveCommand.Create(OnClick);
}

private void OnClick()
{
    //just example of fast action   
    IsClicked = true;
}

但是当我调用它时出现错误:

System.InvalidOperationException: 调用线程不能访问这个对象,因为这个对象的所有者是另一个线程

在调用堆栈中我可以看到它是关于 System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute() 的。 我怎样才能避免 ReactiveCommand.CanExecute 的变化或强制它在 UI 线程中调用?

我希望有更好的错误信息。尝试将 ReactiveUI.WPF 包添加到您的项目中。它包含许多注册到 ReactiveUI 的依赖倒置系统的 WPF 相关线程包。您还可以在 getting started documentation 的第 2 步中找到此信息。编码愉快!

几周来我一直遇到同样的问题。当菜单项试图更新其状态(ReactiveCommand 绑定到菜单项)时抛出我的异常。

ReactiveUI.WPF 添加到项目中解决了问题。