Каковы различия между различными методами WhenAny в Reactive UI

Существует несколько методов расширения в реактивной ui для получения наблюдаемых изменений свойств.

Думаю, я понимаю WhenAny и WhenAnyValue. WhenAny - это серия уведомлений об изменении свойств, в которых вы хотите, чтобы метаданные, у которых был объект и свойство, имели изменение, а WhenAnyValue - когда вам действительно нужен поток измененных значений.

Прежде всего, это точная оценка?

Как насчет WhenAnyDynamic, WhenAnyObservable и ObservableForProperty? Я не могу понять, для чего они нужны, или как они отличаются от первых двух. Все ли они предназначены для общественного использования? Какова их цель?

Ответ 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, который существует по соображениям совместимости.