public static IObservable <PropertyChangedEventArgs> ObservePropertyChangedSlim(this INotifyPropertyChanged source, string name, bool signalInitial = true) { Ensure.NotNull(source, nameof(source)); Ensure.NotNullOrEmpty(name, "name"); if (source.GetType().GetProperty(name) == null) { throw new ArgumentException($"The type {source.GetType()} does not have a property named {name}", name); } var observable = source.ObservePropertyChangedSlim() .Where(e => IsPropertyName(e, name)); if (signalInitial) { observable = observable.StartWith(new PropertyChangedEventArgs(name)); } return(observable); }