以下行引发运行时异常:
Accept = ReactiveCommand.Create(this.WhenAnyValue(x => x.Canexecute()));
以下是代码:
public class InstructionsViewModel : ReactiveObject
{
public InstructionsViewModel()
{
Accept = ReactiveCommand.Create(this.WhenAnyValue(x => x.CanExecute));
Accept.Subscribe(x =>
{
Debug.Write("Hello World");
});
}
public ReactiveCommand<object> Accept { get; }
bool _canExecute;
public bool CanExecute { get { return _canExecute; } set { this.RaiseAndSetIfChanged(ref _canExecute, value); } }
}
错误:
无法将lambda表达式转换为&#39; IObserver&#39;因为 它不是委托类型
我还尝试过以下方法:
public InstructionsViewModel()
{
Accept = ReactiveCommand.Create(this.WhenAnyValue(x => x.Canexecute()));
Accept.Subscribe(x =>
{
Debug.Write("Hello World");
});
}
public ReactiveCommand<object> Accept { get; }
public bool Canexecute() => true;
我收到以下错误:
类型&#39; System.NotSupportedException&#39;的例外情况发生在 ReactiveUI.dll但未在用户代码中处理
其他信息:仅支持索引表达式 常数。
Windows Phone 10上是否支持此功能?
答案 0 :(得分:1)
我猜您的问题不在于ReactiveCommand
,而在于WhenAnyValue
。
WhenAnyValue
接受属性,同时使用方法提供该属性,这会导致运行时异常(see the sourcecode)。
检查这是否有效(我将CanExecute
更改为属性而不是方法):
public InstructionsViewModel()
{
Accept = ReactiveCommand.Create(this.WhenAnyValue(x => x.CanExecute));
Accept.Subscribe(x =>
{
Debug.Write("Hello World");
});
}
public ReactiveCommand<object> Accept { get; }
private bool _canExecute;
public bool CanExecute { get { return _canExecute; } set { this.RaiseAndSetIfChanged(ref _canExecute, value); } }
另外,作为一般建议 - 不要嵌套你的电话,这会使调试变得更难。您应该将创建命令拆分为两行:
var canExecute = this.WhenAnyValue(x => x.CanExecute)
Accept = ReactiveCommand.Create(canExecute);