public ObservableBindBox(IConfigurationChangeNotifyable changeNotifyable,
                                 IConfiguration configuration,
                                 BindSettings bindSettings,
                                 ConfigBindMode mode,
                                 Action <Action> updater)
            : base(changeNotifyable, bindSettings, mode, updater)
        {
            Configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            NotifyObject  = bindSettings.Value as INotifyPropertyChanged;
            if (NotifyObject is null)
            {
                throw new InvalidCastException($"Can't case {changeNotifyable.GetType().FullName} to {typeof(INotifyPropertyChanged).FullName}");
            }
            notifyPropertyMap = NotifyObject.GetType().GetProperties()
                                .ToDictionary(x => x.Name, x => new PropertyBindBox(x));

            propertyConfigMap = new Dictionary <string, PropertyBindBox>();
            propertyVisitor   = CompilePropertyVisitor.Instance;
        }