Каковы различия между различными методами WhenAny в реактивном пользовательском интерфейсе

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

Я думаю, что понимаю 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,и Observable Forproperty?

WhenAnyDynamic похоже на WhenAny, но когда вещи, которые вы хотите наблюдать, не являются константами - вам, вероятно, это не понадобится, но rxui internals делает.

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