Пример #1
0
        public static Action Bind(this UISwitch toggle, INotifyPropertyChanged source, string propertyName)
        {
            var property = source.GetProperty(propertyName);

            if (property.PropertyType == typeof(bool))
            {
                toggle.SetValue(source, property);
                var handler = new PropertyChangedEventHandler((s, e) =>
                {
                    if (e.PropertyName == propertyName)
                    {
                        toggle.InvokeOnMainThread(() =>
                                                  toggle.SetValue(source, property));
                    }
                });

                source.PropertyChanged += handler;

                var valueChanged = new EventHandler(
                    (sender, e) => property.GetSetMethod().Invoke(source, new object[] { toggle.On }));

                toggle.ValueChanged += valueChanged;

                return(new Action(() =>
                {
                    source.PropertyChanged -= handler;
                    toggle.ValueChanged -= valueChanged;
                }));
            }
            else
            {
                throw new InvalidCastException("Binding property is not boolean");
            }
        }