Beispiel #1
0
 public void Subscribe(object target, Action action)
 {
     if (target != null && memberInfo != null)
     {
         changeAction = Binding.AddMemberChangeAction(target, memberInfo, i => action());
     }
 }
Beispiel #2
0
        internal static MemberChangeAction AddMemberChangeAction(object target, MemberInfo member, Action <int> k)
        {
            MemberChangeAction sub = null;

            if (target is INotifyPropertyChanged)
            {
                var key = Tuple.Create(target, member);
                if (objectSubs.TryGetValue(target, out var subs) == false)
                {
                    subs = new Dictionary <MemberInfo, MemberActions>
                    {
                        { member, new MemberActions(target, member) },
                    };

                    objectSubs.Add(target, subs);
                }

                // Debug.WriteLine ("ADD CHANGE ACTION " + target + " " + member);
                sub = new MemberChangeAction(target, member, k);

                if (subs.ContainsKey(member) == false)
                {
                    subs.Add(member, new MemberActions(target, member));
                }

                subs[member].AddAction(sub);
            }
            return(sub);
        }
        public void RemoveAction(MemberChangeAction action)
        {
            actions.Remove(action);

            if (actions.Count == 0)
            {
                UnsubscribeFromChangeNotificationEvent();
            }
        }
        /// <summary>
        /// Add the specified action to be executed when Notify() is called.
        /// </summary>
        /// <param name="action">Action.</param>
        public void AddAction(MemberChangeAction action)
        {
            if (actions.Count == 0)
            {
                AddChangeNotificationEventHandler();
            }

            actions.Add(action);
        }
Beispiel #5
0
        internal static void RemoveMemberChangeAction(MemberChangeAction sub)
        {
            if (objectSubs.TryGetValue(sub.Target, out var subs))
            {
                if (subs.TryGetValue(sub.Member, out var memberActions))
                {
                    // Debug.WriteLine ("REMOVE CHANGE ACTION " + sub.Target + " " + sub.Member);
                    memberActions.RemoveAction(sub);

                    if (memberActions.Count == 0)
                    {
                        subs.Remove(sub.Member);
                    }
                }

                if (subs.Count == 0)
                {
                    objectSubs.Remove(sub.Target);
                }
            }
        }