Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.57 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Linq.Expressions;
  6. using System.Reflection;
  7. using System.Text;
  8.  
  9. using Revolucent.Dasso.Core;
  10.  
  11. namespace Revolucent.Dasso.Program.Binding
  12. {
  13.     class Binding<S, P>
  14.         where S : INotifyPropertyChanged
  15.     {
  16.         private readonly PropertyChangedEventHandler handler = null;
  17.         private readonly S source = default(S);
  18.  
  19.         public Binding(S source, Expression<Func<P>> sourceGetterExpression, params Action<P>[] targetSetters)
  20.         {
  21.             var sourceGetter = sourceGetterExpression.Compile();
  22.             var memberExpression = (MemberExpression)sourceGetterExpression.Body;
  23.             var propertyName = memberExpression.Member.Name;
  24.             handler = (sender, e) =>
  25.             {
  26.                 if (e.PropertyName != propertyName)
  27.                     return;
  28.                 targetSetters.ForEach(setter => setter(sourceGetter()));
  29.             };
  30.             source.PropertyChanged += handler;
  31.             handler(source, new PropertyChangedEventArgs(propertyName));
  32.         }
  33.  
  34.         public void Revoke()
  35.         {
  36.             source.PropertyChanged -= handler;
  37.         }
  38.     }
  39.  
  40.     static class BindingHelper
  41.     {
  42.         public static Binding<S, P> SetBinding<S, P>(this S source, Expression<Func<P>> sourceGetterExpression, params Action<P>[] targetSetters)
  43.             where S : INotifyPropertyChanged
  44.         {
  45.             return new Binding<S, P>(source, sourceGetterExpression, targetSetters);
  46.         }
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement