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

 又ettl_329 发布于 2023-01-19 17:54

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

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

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

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

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让你获得一个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在View to Subscribe to Commands中非常有用.

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

    2023-01-19 17:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有