/// <summary>
        /// Prefer other overloads with x => x.PropertyName for refactor friendliness.
        /// This is faster though.
        /// </summary>
        /// <param name="source">
        /// The source.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="signalInitial">
        /// If true OnNext is called immediately on subscribe
        /// </param>
        /// <returns>
        /// The <see cref="IObservable"/>.
        /// </returns>
        public static IObservable <EventPattern <PropertyChangedEventArgs> > ObservePropertyChanged(
            this INotifyPropertyChanged source,
            string name,
            bool signalInitial = true)
        {
            var observable = source.ObservePropertyChanged()
                             .Where(e => IsPropertyName(e.EventArgs, name));

            if (signalInitial)
            {
                var wr = new WeakReference(source);
                return(Observable.Defer(
                           () =>
                {
                    var current = new EventPattern <PropertyChangedEventArgs>(wr.Target, new PropertyChangedEventArgs(name));
                    return Observable.Return(current)
                    .Concat(observable);
                }));
            }
            else
            {
                return(observable);
            }
        }