Example #1
0
        public static void SubscribeNotifier(
            this INotifyPropertyChanged n,
            PropertyChangedEventHandler handler,
            IList <string> targets)
        {
            Debug.Assert(targets.Count > 0);
            var target = targets[0];

            var broker = n.GetBroker();

            if (targets.Count > 1)
            {
                var newTargets = targets.Skip(1).ToArray();
                var newTarget  = newTargets[0];
                void H(object sender, PropertyChangedEventArgs args)
                {
                    if (args is NotifierPropertyChangedEventArgs argt)
                    {
                        Unsubscribe(argt.OldValue, newTargets, handler);
                        Subscribe(argt.NewValue, newTargets, handler);
                    }
                    //handler(sender, args);
                }

                var value = broker.Subscribe(target, H);

                if (value != null)
                {
                    Subscribe(value, newTargets, handler);
                }

                PropertiesHandlers.TryAdd(Tuple.Create(handler, targets), H);
            }

            //if (n is INotifyCollectionChanged && target == "Item") return;
            broker.Subscribe(target, handler);
            PropertiesHandlers.TryAdd(Tuple.Create(handler, targets), handler);
        }