- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 ReactiveUI 5.2.0 和 F# 3.1 中,以下 F# 代码在构造对象时(从 C# WPF 应用程序)会导致 InvalidOperationException
该消息是“对象或值的初始化导致对象或值在完全初始化之前被递归访问”,并且它发生在读取传递到 ObservableForProperty
的属性期间。 (尽管默认是跳过初始值)。
type MyVM() as this =
inherit ReactiveObject()
let source : obj = obj()
let ofp =
this.ObservableForProperty([|"Source"|])
.Select(fun x -> x.Value)
.ToProperty(this, (fun y -> y.Result), obj()) // Exception when executing this
member this.Result with get() = ofp.Value
member this.Source with get() = source // Exception here "The initialization of an object or value resulted in an object or value being accessed recursively before it was fully initialized"
编辑添加:问题似乎是 ToProperty
正在导致ObservableForProperty
在订阅时查询“Source”属性,并且 F# 在查询属性之前检查构造函数是否已完成。
更多信息:在 ReactiveNotifyPropertyChangedMixin.nestedObservedChanges
, kicker
的组合和fillInValue
导致在通过 PropertyChanged
通知任何更改之前查询该值
最佳答案
从 ReactiveUI 版本 5.4.0 开始,ObservableForProperty 有一个新的重载,它需要一个简单的非链式属性来监视。
如果您添加以下扩展方法:
let toPropName(query : Expr) =
match query with
| PropertyGet(a, b, list) -> b.Name
| _ -> ""
[<Extension>]
type ReactiveObjectExtender =
[<Extension>]
static member ObservableForProperty<'u, 't when 'u :> ReactiveObject>(this: 'u, expr : Expr<'t>, ?beforeChange, ?skipInitial) =
let propertyName = toPropName expr
this.ObservableForProperty<'u, 't>(propertyName, defaultArg beforeChange false, defaultArg skipInitial true)
然后您可以使用以下语法观察属性更改:
this.ObservableForProperty(<@ this.MyProperty @>)
关于.net - 为什么 ObservableForProperty 上的 ReactiveUI 的 ToProperty 会导致 F# 中的 FailInit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19958446/
我很好奇 ObservableForProperty 的生命周期在没有明确调用 Observer 上的 Dispose 时的生命周期。在这种情况下,我真的不在乎订阅时间太长等等。 在传统的 .NET
在 ReactiveUI 5.2.0 和 F# 3.1 中,以下 F# 代码在构造对象时(从 C# WPF 应用程序)会导致 InvalidOperationException 该消息是“对象或值的初
我是一名优秀的程序员,十分优秀!