【问题标题】:WhenAnyObservable throws with message 'Index expressions are only supported with constants.'WhenAnyObservable 抛出消息“索引表达式仅支持常量。”
【发布时间】:2019-11-10 12:03:57
【问题描述】:

我想观察一个属性路径:MainViewModel.Project.SelectedDocument.Align

  1. AlignReactiveCommand<Unit, Unit> 类型的常规属性。
  2. ProjectSelectedDocument 是常规属性。

我正在使用它来创建 observable(来自 MainViewModel):

var commandObs = this
    .WhenAnyObservable(x => x.Project.SelectedDocument.WhenAnyValue(y => y.Align));

我在这一行遇到异常,并显示以下消息:

System.NotSupportedException: '索引表达式只支持常量。'

怎么了?

由于WhenAnyObservable 方法在属性路径的末尾需要一个可观察的属性,所以我使用内部的WhenAnyValue 创建它。那是问题吗?属性表达式应该是简单的访问表达式而不是方法调用吗?

无论如何,我从这个答案中获取了代码:ReactiveUI How to use WhenAnyObservable properly

它应该有效 :) 但在这种情况下不适合我。

【问题讨论】:

标签: c# system.reactive reactiveui


【解决方案1】:

WhenAny 中的表达式必须指向属性或字段。这就是reactiveui抛出异常的原因。您需要公开 IObservable 属性,或者您可以使用 SelectSwitch 语句。

例如

var commandObs = this
    .WhenAnyValue(x => x.Project.SelectedDocument)
    .Select(x => x.WhenAnyValue(y => y.Align))
    .Switch()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多