Exemplo n.º 1
0
        public virtual void Bind(T target, object source)
        {
            INotifyPropertyChanged propertyChanged = source as INotifyPropertyChanged;

            if (propertyChanged != null)
            {
                ItemsBinder <T> .TargetDictionary targetDictionary = (ItemsBinder <T> .TargetDictionary)null;
                if (!this._sources.TryGetValue(source, out targetDictionary))
                {
                    targetDictionary = new ItemsBinder <T> .TargetDictionary();

                    this._sources.Add(source, targetDictionary);
                }
                ItemsBinder <T> .TargetEventListener targetEventListener = (ItemsBinder <T> .TargetEventListener)null;
                if (!targetDictionary.TryGetValue(target, out targetEventListener))
                {
                    targetEventListener = new ItemsBinder <T> .TargetEventListener(this);

                    targetEventListener.OnEventAction  = (Action <ItemsBinder <T>, object, PropertyChangedEventArgs>)((instance, sender, eventArgs) => instance.SourcePropertyChanged(sender, eventArgs));
                    targetEventListener.OnDetachAction = (Action <WeakEventListener <ItemsBinder <T>, object, PropertyChangedEventArgs> >)(weakEventListener => propertyChanged.PropertyChanged -= new PropertyChangedEventHandler(weakEventListener.OnEvent));
                    propertyChanged.PropertyChanged   += new PropertyChangedEventHandler(((WeakEventListener <ItemsBinder <T>, object, PropertyChangedEventArgs>)targetEventListener).OnEvent);
                    targetDictionary.Add(target, targetEventListener);
                }
            }
            this.CallUpdateTarget(target, source, (string)null);
        }
Exemplo n.º 2
0
 private void SourcePropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     ItemsBinder <T> .TargetDictionary targetDictionary = (ItemsBinder <T> .TargetDictionary)null;
     if (!this._sources.TryGetValue(sender, out targetDictionary))
     {
         return;
     }
     foreach (T target in targetDictionary.Keys)
     {
         this.CallUpdateTarget(target, sender, e.PropertyName);
     }
 }
Exemplo n.º 3
0
 public virtual void Unbind(T target, object source)
 {
     ItemsBinder <T> .TargetDictionary targetDictionary = (ItemsBinder <T> .TargetDictionary)null;
     if (!this._sources.TryGetValue(source, out targetDictionary))
     {
         return;
     }
     ItemsBinder <T> .TargetEventListener targetEventListener = (ItemsBinder <T> .TargetEventListener)null;
     if (targetDictionary.TryGetValue(target, out targetEventListener))
     {
         targetEventListener.Detach();
         targetDictionary.Remove(target);
     }
     if (targetDictionary.Count != 0)
     {
         return;
     }
     this._sources.Remove(source);
 }
Exemplo n.º 4
0
 public TargetEventListener(ItemsBinder <T> binder)
     : base(binder)
 {
 }