Reactive UI中各种WhenAny方法之间的区别是什么

Cly*_*yde 25 .net reactiveui

Reactive UI中有几种扩展方法,用于获取属性更改的可观察对象.

我想我明白WhenAnyWhenAnyValue. WhenAny用于一系列属性更改通知,其中您希望哪个对象和属性的元数据发生了更改,而WhenAnyValue当您真正想要更改值的流时.

首先,这是一个准确的评估吗?

怎么样WhenAnyDynamic,WhenAnyObservableObservableForProperty?我无法弄清楚它们的用途,或者它们与前两个有何不同.它们都是供公众使用的吗?他们的目的是什么?

Ana*_*tts 39

我想我理解WhenAny和WhenAnyValue.

让我通过代码演示:

// These two statements are 100% identical, but the latter looks nicer.
this.WhenAny(x => x.Foo.Bar, x => x.Value)

this.WhenAnyValue(x => x.Foo.Bar);
Run Code Online (Sandbox Code Playgroud)

那么WhenAnyDynamic,WhenAnyObservable和ObservableForProperty怎么样?

WhenAnyDynamic 就像WhenAny,但是当你想要观察的东西不是常数时 - 你可能不需要它,但是RxUI内部会这样做.

WhenAnyObservable让你获得一个Observable,但不必担心背后的物体变化.例如

this.SomeChildViewModel.MyCoolCommand
    .Subscribe(x => Console.WriteLine("Clicked!"));

// Later...
this.SomeChildViewModel = new SomeChildViewModel();

// (Hey, why doesn't my Clicked! handler show up anymore! I'm still subscribed
// to the old object but it's super not obvious that's what happened)
Run Code Online (Sandbox Code Playgroud)

this.WhenAnyObservable(x => x.MyCoolCommand).
    .Subscribe(x => Console.WriteLine("Clicked!"));

// Later...
this.SomeChildViewModel = new SomeChildViewModel();

// Cool, everything still works.
Run Code Online (Sandbox Code Playgroud)

WhenAnyObservable在View to Subscribe to Commands中非常有用.

ObservableForProperty就像WhenAny但最初订阅时不会触发.您可能应该忽略它,它实际上只是出于兼容性原因而出现的WhenAny的构建块.

  • 应该`this.WhenAnyObservable(x => x.MyCoolCommand).`不是`this.WhenAnyObservable(x => x.SomeChildViewModel.MyCoolCommand).`? (5认同)
  • 所以你是说WhenAny(..).如果我真的只想要更改通知,Skip(1)优于ObservableForProperty(..)?ObservableForProperty可能会从未来版本中删除吗? (4认同)