コード例 #1
0
ファイル: DumbBinding.cs プロジェクト: SmaSTra/SmaSTra
        public static DumbBinding SetBinding(DumbBindingTarget target, BindingBase bindingToSource)
        {
            lock (instances)
            {
                if (target == null)
                {
                    throw new ArgumentNullException("target");
                }

                DumbBinding result = new DumbBinding(bindingToSource, target);

                ClearBinding(target);

                object targetObject = target.TargetObject;
                if (targetObject == null)
                {
                    throw new ArgumentException("target.TargetObject is no longer alive.", "target");
                }

                KeyValuePair <int, int> key = new KeyValuePair <int, int>(target.GetHashCode(), targetObject.GetHashCode());
                if (instances.ContainsKey(key))
                {
                    instances[key].Add(result);
                }
                else
                {
                    instances.Add(key, new List <DumbBinding>()
                    {
                        result
                    });
                }

                return(result);
            }
        }
コード例 #2
0
ファイル: DumbBinding.cs プロジェクト: SmaSTra/SmaSTra
        public static DumbBinding GetBinding(DumbBindingTarget target)
        {
            lock (instances)
            {
                if (target == null)
                {
                    throw new ArgumentNullException("target");
                }

                object targetObject = target.TargetObject;
                if (targetObject == null)
                {
                    throw new ArgumentException("target.TargetObject is no longer alive.", "target");
                }

                KeyValuePair <int, int> key = new KeyValuePair <int, int>(target.GetHashCode(), targetObject.GetHashCode());
                if (instances.ContainsKey(key))
                {
                    return(instances[key].FirstOrDefault(binding => object.Equals(binding.Target, target)));
                }
                else
                {
                    return(null);
                }
            }
        }
コード例 #3
0
ファイル: DumbBinding.cs プロジェクト: SmaSTra/SmaSTra
        public static void ClearBinding(DumbBindingTarget target)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            object targetObject = target.TargetObject;

            if (targetObject == null)
            {
                throw new ArgumentException("target.TargetObject is no longer alive.", "target");
            }

            lock (instances)
            {
                KeyValuePair <int, int> key = new KeyValuePair <int, int>(target.GetHashCode(), targetObject.GetHashCode());
                if (instances.ContainsKey(key))
                {
                    var list = instances[key];
                    for (int i = list.Count - 1; i >= 0; i--)
                    {
                        DumbBinding binding = list[i];
                        if (object.Equals(target, binding.Target) || binding.Target.TargetObject == null)
                        {
                            binding.Clear();
                            list.RemoveAt(i);
                        }
                    }

                    if (list.Count == 0)
                    {
                        instances.Remove(key);
                    }
                }
            }
        }