本文介绍了您是否考虑过添加另一个Create方法:IObservable< TResult>创建< TResult>(表达式< Func< TResult>>表达式)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 您好我一直在研究Rx的一个扩展,它目前基于DataBinding,但我确信您可以删除此依赖项并保留API,我认为它非常好。您是否考虑过向Rx添加类似的功能?如果是这样,你为什么抛弃它?Hi I've been working on one extension to Rx which is currently based on DataBinding but I'm sure you could remove this dependency and preserve API which I think it quite good. Have you been thinking about adding similar functionality to Rx? If so why you abandoned it?您可以在以下网址获得有关我的解决方案的更多信息:You can get more information about my solution at: https://github.com / StanislawSwierc / CodeBinding https://github.com/StanislawSwierc/CodeBinding 这是我为这个项目创建的API规范:Here is the API Specification I created for this project: 以下示例创建IObservable的实例< int>当Value属性发生变化时会通知观察者。 // obj是一个实现INotifyPropertyChanged的实例 //带Value属性类型int IObservable < INT > source = ObservableEx .Create(()=> obj.Value); IObservable<int> source = ObservableEx.Create(() => obj.Value); 以下示例创建IObservable的实例< int>当表达式中使用的任何对象的Value属性发生更改时,它会通知观察者(obj1,obj2)。 // obj1和obj2是实现 的类的实例 // INotifyPropertyChanged,其Value属性类型为int IObservable < int > source = ObservableEx .Create(()=> obj1.Value + obj2.Value); IObservable<int> source = ObservableEx.Create(() => obj1.Value + obj2.Value); 以下示例创建IObservable的实例< int>当obj对象上的Foo属性发生变化或obj.Foo对象上的Bar属性发生更改时,它会通知观察者。如果将obj.Foo更改为不同的实例,则检查以查看它是否实现了INotifyPropertyChanged。如果是阳性测试,来自它的通知将触发表达式重新评估,并将传播给观察者。 如果是obj。 Foo为null且无法计算Bar属性,所有观察者都通过OnError方法通知NullReferenceException。此外,这会终止事件流。 // obj1是一个实现INotifyPropertyChanged的实例 // with Foo property另一种也实现此接口的类型 //属性栏类型为int IObservable < int > source = ObservableEx .Create(()=> obj.Foo.Bar); IObservable<int> source = ObservableEx.Create(() => obj.Foo.Bar); public static class ObservableEx publicstatic class ObservableEx { public static IObservable < TResult> 创建< TResult>(表达式< Func < TResult>>表达式); public staticIObservable<TResult> Create<TResult>(Expression<Func<TResult>> expression); } 会员 公共 静态 IObservable < TResult> publicstatic IObservable<TResult> 创建< TResult>(表达式< Func < TResult>> 表达式); Create<TResult>(Expression<Func<TResult>> expression); 行为 创建IObservable< T>提供的lambda表达式的对象。只要参与评估过程的任何属性发生变化,就会重新评估表达式。为了检测这些瞬间,表达式中使用的对象必须实现INotifyPropertyChanged接口。 例外 ArgumentNullException– if expression为null 推荐答案 我们在Rxx中有类似的扩展名为 FromPropertyChangedPattern 。 它与 INotifyPropertyChanged , [Property]已更改事件模式以及WPF依赖项属性一起使用。 它还支持无限制的链接属性,例如 obj.Foo.Bar 示例。We have a similar extension in Rxx called FromPropertyChangedPattern. It works with INotifyPropertyChanged, the[Property]Changed event pattern, and WPF dependency properties. It also supports unlimited chained properties like yourobj.Foo.Bar example.此扩展本身不直接支持复杂表达式,例如: ()=> obj1.Value + obj2.Value This extension alone doesn't support complex expressions directly, such as: () => obj1.Value + obj2.Value但是,我们在Rxx中有一个名为 OperationalObservables 的内容。 这些扩展程序可以提供与您的示例相同的功能:However, we have something called OperationalObservables in Rxx. Together, these extensions can provide the same functionality as in your example: var o1 = Observable2.FromPropertyChangedPattern(() => obj1.Value).AsOperational(Observable.CombineLatest);var o2 = Observable2.FromPropertyChangedPattern(() => obj2.Value);var o = o1 + o2; 这篇关于您是否考虑过添加另一个Create方法:IObservable< TResult>创建< TResult>(表达式< Func< TResult>>表达式)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 10-22 21:25