Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Reflection;
- using System.Text;
- using Revolucent.Dasso.Core;
- namespace Revolucent.Dasso.Program.Binding
- {
- class Binding<S, P>
- where S : INotifyPropertyChanged
- {
- private readonly PropertyChangedEventHandler handler = null;
- private readonly S source = default(S);
- public Binding(S source, Expression<Func<P>> sourceGetterExpression, params Action<P>[] targetSetters)
- {
- var sourceGetter = sourceGetterExpression.Compile();
- var memberExpression = (MemberExpression)sourceGetterExpression.Body;
- var propertyName = memberExpression.Member.Name;
- handler = (sender, e) =>
- {
- if (e.PropertyName != propertyName)
- return;
- targetSetters.ForEach(setter => setter(sourceGetter()));
- };
- source.PropertyChanged += handler;
- handler(source, new PropertyChangedEventArgs(propertyName));
- }
- public void Revoke()
- {
- source.PropertyChanged -= handler;
- }
- }
- static class BindingHelper
- {
- public static Binding<S, P> SetBinding<S, P>(this S source, Expression<Func<P>> sourceGetterExpression, params Action<P>[] targetSetters)
- where S : INotifyPropertyChanged
- {
- return new Binding<S, P>(source, sourceGetterExpression, targetSetters);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement