class BindingContext implements UiUpdateObserver {

    public void removeBindingsForPmo(Object pmo) {
        bindings.values().removeIf(ref -> {
            Binding binding = ref.get();
            return binding != null && binding.getPmo() == pmo;
        });
        getBindingStream()
                .filter(BindingContext.class::isInstance)
                .map(BindingContext.class::cast)
                .forEach(bc -> bc.removeBindingsForPmo(pmo));

        if (pmo instanceof PresentationModelObject) {
            ((PresentationModelObject)pmo).getEditButtonPmo().ifPresent(this::removeBindingsForPmo);
        }
        if (pmo instanceof ContainerPmo) {
            ((ContainerPmo<?>)pmo).getAddItemButtonPmo().ifPresent(this::removeBindingsForPmo);
        }
    }

    public  BindingContext();
    public  BindingContext(String contextName);
    public  BindingContext(String contextName, PropertyBehaviorProvider behaviorProvider,
            Handler afterUpdateHandler);
    public  BindingContext(String contextName, PropertyBehaviorProvider behaviorProvider,
            PropertyDispatcherFactory dispatcherFactory, Handler afterUpdateHandler);

}