From ReactiveUI version 5.4.0, there's a new overload to ObservableForProperty that takes a simple non-chained property to monitor.
If you add to that the following extension method:
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)
Then you can observe property changes using the syntax:
this.ObservableForProperty(<@ this.MyProperty @>)