【发布时间】:2019-11-10 12:03:57
【问题描述】:
我想观察一个属性路径:MainViewModel.Project.SelectedDocument.Align
-
Align是ReactiveCommand<Unit, Unit>类型的常规属性。 -
Project和SelectedDocument是常规属性。
我正在使用它来创建 observable(来自 MainViewModel):
var commandObs = this
.WhenAnyObservable(x => x.Project.SelectedDocument.WhenAnyValue(y => y.Align));
我在这一行遇到异常,并显示以下消息:
System.NotSupportedException: '索引表达式只支持常量。'
怎么了?
由于WhenAnyObservable 方法在属性路径的末尾需要一个可观察的属性,所以我使用内部的WhenAnyValue 创建它。那是问题吗?属性表达式应该是简单的访问表达式而不是方法调用吗?
无论如何,我从这个答案中获取了代码:ReactiveUI How to use WhenAnyObservable properly
它应该有效 :) 但在这种情况下不适合我。
【问题讨论】:
-
如果您能提供minimal reproducible example,那就太好了。
-
这可能是 Lambda 变量捕获问题的问题/保护:blogs.msdn.microsoft.com/matt/2008/03/01/… |类似于我们在 .NET 2.0 中添加 CrossThreadException 的方式。所以人们最终会使用调用(并避免它要解决的问题):stackoverflow.com/a/14703806/3346583
标签: c# system.reactive reactiveui