Ejemplo n.º 1
0
        public static void BindFlagInput <T>(this Element self, BindFlagInputOptions <T> options)
            where T : class, INotifyPropertyChanged
        {
            var source = options.BindObject
                         ?? throw new ArgumentNullException(nameof(options.BindObject));
            var property = options.Property
                           ?? throw new ArgumentNullException(nameof(options.Property));

            if (property.Body is not MemberExpression)
            {
                throw new ArgumentException(Resources.InvalidBindingExpression);
            }

            var attribute = options.Attribute;

            if (string.IsNullOrWhiteSpace(attribute))
            {
                throw new ArgumentException("Attribute cannot be empty");
            }
            attribute = attribute.ToLowerInvariant();
            var setter = CompileSetter(property);
            var getter = property.Compile();

            self.Bind(source, _ =>
            {
                var value = getter(source);
                self.ToggleAttributeLower(attribute, value);
            });
            self.BindBack(_ =>
            {
                var value = self.HasAttributeLower(attribute);
                setter(source, value);
            });
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Adds a two-way binding for a flag attribute (e.g. 'checked' attribute)
 /// </summary>
 /// <typeparam name="T">Type of data source</typeparam>
 /// <param name="options">Binding options</param>
 /// <returns>This instance</returns>
 public LaraBuilder BindFlagInput <T>(BindFlagInputOptions <T> options)
     where T : class, INotifyPropertyChanged
 {
     _stack.Peek().BindFlagInput(options);
     return(this);
 }