public override nfloat GetRowHeight(NSOutlineView outlineView, NSObject item)
        {
            EditorViewModel     vm;
            PanelGroupViewModel group;
            string cellIdentifier;

            GetVMGroupCellItendifiterFromFacade(item, out vm, out group, out cellIdentifier);

            if (group != null)
            {
                return(24);
            }

            if (!this.registrations.TryGetValue(cellIdentifier, out EditorRegistration registration))
            {
                registration = new EditorRegistration();

                if (cellIdentifier == nameof(PanelHeaderEditorControl))
                {
                    registration.RowSize = 54;
                }
                else
                {
                    NSView      editorOrContainer = GetEditor(cellIdentifier, vm, outlineView);
                    IEditorView view = ((editorOrContainer as EditorContainer)?.EditorView) ?? editorOrContainer as IEditorView;

                    if (view == null)
                    {
                        registration.RowSize = 24;
                    }
                    else if (view.IsDynamicallySized)
                    {
                        registration.SizingInstance = view;
                    }
                    else
                    {
                        this.registrations[cellIdentifier] = registration = new EditorRegistration {
                            RowSize = view.GetHeight(vm)
                        };

                        this.firstCache[cellIdentifier] = view;
                    }
                }

                this.registrations[cellIdentifier] = registration;
            }

            // The double cast below is needed for now, while the return value is type ObjCRuntime.nfloat
            // in order for the integral to floating point conversion to work properly. Later when ObjCRuntime.nfloat
            // is replaced with System.Runtime.InteropServices.NFloat that won't be needed (but can't hurt).
            nfloat rowHeight = (nfloat)(double)registration.GetHeight(vm);

            return(rowHeight);
        }
        public override nfloat GetRowHeight(NSOutlineView outlineView, NSObject item)
        {
            EditorViewModel     vm;
            PanelGroupViewModel group;
            string cellIdentifier;

            GetVMGroupCellItendifiterFromFacade(item, out vm, out group, out cellIdentifier);

            if (group != null)
            {
                return(24);
            }

            if (!this.registrations.TryGetValue(cellIdentifier, out EditorRegistration registration))
            {
                registration = new EditorRegistration();

                if (cellIdentifier == nameof(PanelHeaderEditorControl))
                {
                    registration.RowSize = 54;
                }
                else
                {
                    NSView      editorOrContainer = GetEditor(cellIdentifier, vm, outlineView);
                    IEditorView view = ((editorOrContainer as EditorContainer)?.EditorView) ?? editorOrContainer as IEditorView;

                    if (view == null)
                    {
                        registration.RowSize = 24;
                    }
                    else if (view.IsDynamicallySized)
                    {
                        registration.SizingInstance = view;
                    }
                    else
                    {
                        this.registrations[cellIdentifier] = registration = new EditorRegistration {
                            RowSize = view.GetHeight(vm)
                        };

                        this.firstCache[cellIdentifier] = view;
                    }
                }

                this.registrations[cellIdentifier] = registration;
            }

            return(registration.GetHeight(vm));
        }