在RxUI 6中订阅ReactiveCommand的正确方法是什么?

时间:2014-04-24 16:20:49

标签: c# xamarin-studio reactiveui

我正在尝试使用ReactiveUI 6(beta)设置一个简单的框架ViewModel并不断收到编译器错误(在Xamarin Studio,FWIW中)。

代码:

using System;
using System.Reactive;
using System.Reactive.Linq;
using ReactiveUI;

// ...

public IReactiveCommand TryAuthenticateCommand { get; protected set; }

// ...

this.TryAuthenticateCommand = ReactiveCommand.Create(
this.WhenAny(
    x => x.Username,
    x => x.Password,
    (username, password) => 
        !string.IsNullOrWhiteSpace(username.Value) && 
        !string.IsNullOrWhiteSpace(password.Value)));
this.TryAuthenticateCommand.Subscribe(x => MessageBus.Current.SendMessage("Yes!"));

错误:

Error CS0411: The type arguments for method `System.ObservableExtensions.Subscribe<T>(this System.IObservable<T>, System.Action<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly (CS0411)

1 个答案:

答案 0 :(得分:2)

这段代码很完美,我想你只是缺少一个使用语句,“使用System.Reactive”

更新:这不起作用的原因是代码不在代码段中。您将TryAuthenticateCommand声明为IReactiveCommand,但未实现IObservable<T>T会是什么?)。

在这种情况下,由于您没有提供异步方法,因此ReactiveCommand会返回CommandParameter,它是object。因此将其声明为ReactiveCommand<object>,一切正常