Ответ 1
Думаю, я понимаю 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);
Как насчет WhenAnyDynamic, WhenAnyObservable и ObservableForProperty?
WhenAnyDynamic
похож на WhenAny, но когда вещи, которые вы хотите наблюдать, не являются константами - вам, вероятно, это не понадобится, но внутренние элементы RxUI делают.
WhenAnyObservable
позволяет получить Наблюдаемый, но не нужно беспокоиться об изменениях объектов за вашей спиной. Например
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 super not obvious that what happened)
Против
this.WhenAnyObservable(x => x.MyCoolCommand).
.Subscribe(x => Console.WriteLine("Clicked!"));
// Later...
this.SomeChildViewModel = new SomeChildViewModel();
// Cool, everything still works.
WhenAnyObservable очень полезен в Просмотр для подписки на команды.
ObservableForProperty
похож на WhenAny, но не срабатывает при первом подписании. Вы, вероятно, должны игнорировать его, это действительно просто строительный блок для WhenAny, который существует по соображениям совместимости.