         disposable += outlineView.reactive.delegate.feed(
             property: dataSource,
             to: #selector(NSOutlineViewDelegate.outlineView(_:heightOfRowByItem:)),
-            map: { (dataSource: Element.UnderlyingCollection?, outlineView: NSOutlineView, item: Element.UnderlyingCollection?) -> CGFloat in
+            map: { (dataSource: Element.UnderlyingCollection?, outlineView: NSOutlineView, item: Element.UnderlyingCollection.Element?) -> CGFloat in
                 guard let dataSource = dataSource else { return outlineView.rowHeight }
                 return binder.height(for: item, outlineView: outlineView, dataSource: dataSource) ?? outlineView.rowHeight
             }

        self.createCell = nil
    }

    public init(isItemExpandable: ((TreeNode, TreeNode?, NSOutlineView) -> Bool)? = nil, measureCell: ((TreeNode, TreeNode?, NSOutlineView) -> CGFloat?)? = nil, createCell: ((TreeNode, TreeNode?, NSTableColumn?, NSOutlineView) -> NSView?)? = nil) {
        self.isItemExpandable = isItemExpandable
        self.measureCell = measureCell
        self.createCell = createCell
    }

    open func isExpandable(for item: TreeNode?, outlineView: NSOutlineView, dataSource: TreeNode) -> Bool {
        return self.isItemExpandable?(dataSource, item, outlineView) ?? false
    }

    open func height(for item: TreeNode?, outlineView: NSOutlineView, dataSource: TreeNode) -> CGFloat? {
        return self.measureCell?(dataSource, item, outlineView) ?? outlineView.rowHeight
    }

    open func cell(for item: TreeNode?, tableColumn: NSTableColumn?, outlineView: NSOutlineView, dataSource: TreeNode) -> NSView? {
        return self.createCell?(dataSource, item, tableColumn, outlineView) ?? nil
    }


        disposable += outlineView.reactive.dataSource.feed(
            property: dataSource,
            to: #selector(NSOutlineViewDataSource.outlineView(_:child:ofItem:)),
            map: { (dataSource: Element.UnderlyingCollection?, _: NSOutlineView, child: Int, item: Element.UnderlyingCollection.Element?) -> Any in
                guard let item = item else {
                    return dataSource![IndexPath(index: child)]
                }
