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);
        }