ReactiveUI-5.99.6:ReactiveCommand CanExecute始终返回False

时间:2018-09-07 12:56:27

标签: wpf reactiveui

我正在使用ReactiveUI-5.99.6,但无法通过此简单的测试通过

public class ViewModel : ReactiveObject
{
    public ReactiveList<int> List { get; private set; }
    public IReactiveCommand Command { get; private set; }

    public ViewModel()
    {
        List = new ReactiveList<int>();
        Command = ReactiveCommand.Create(List.Changed.Select(_ => List.Any()));
    }
}

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var vm = new ViewModel();

        vm.List.Add(2);
        Assert.IsTrue(vm.Command.CanExecute(null));
    }
}

有人可以告诉我我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

我不知道版本5.99.6(!?),但是以下实现应该使您的单元测试通过版本8.7.2:

public class ViewModel : ReactiveObject
{
    public ReactiveList<int> List { get; private set; }
    public ICommand Command { get; private set; }

    public ViewModel()
    {
        List = new ReactiveList<int>();
        Command = ReactiveCommand.Create(() => { /* do something */ }, List.Changed.Select(_ => List.Any()));
    }
}

如果将Command属性的类型更改为ICommand以外的任何其他值(例如ReactiveCommand<Unit, Unit>),则单元测试将如下所示:

[TestMethod]
public async Task TestMethod1()
{
    var vm = new ViewModel();
    vm.List.Add(2);
    Assert.IsTrue(await vm.Command.CanExecute.FirstAsync());
}
  

如果我的项目是.Net 4.5,我应该获得什么版本?

ReactiveUI 7.4.0支持.NET Framework 4.5。上面的解决方案也适用于该版本。