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

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

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

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

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

1 ответ

Решение

Я думаю, что я понимаю, когда AnyAn и 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 позволяет вам получить 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)

Против

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

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

// Cool, everything still works.

WhenAnyObservable очень полезен в представлении для подписки на команды.

ObservableForProperty похоже на WhenAny, но не запускается при первоначальной подписке на. Вы, вероятно, должны игнорировать это, это действительно просто строительный блок для WhenAny, который существует по причинам совместимости.

Другие вопросы по тегам