         disposable += tableView.reactive.dataSource.feed(
             property: dataSource,
             to: #selector(NSTableViewDataSource.tableView(_:objectValueFor:row:)),
-            map: { (dataSource: UnderlyingCollection?, _: NSTableView, _: NSTableColumn, row: Int) -> Any? in
+            map: { (dataSource: Element.UnderlyingCollection?, _: NSTableView, _: NSTableColumn, row: Int) -> Any? in
                 return dataSource?[row]
             }
         )

        disposable += tableView.reactive.dataSource.feed(
            property: dataSource,
            to: #selector(NSTableViewDataSource.numberOfRows(in:)),
            map: { (dataSource: UnderlyingCollection?, _: NSTableView) -> Int in
                return dataSource?.count ?? 0
            }
        )

    }

    @discardableResult
    public func bind(to tableView: NSTableView, using binder: TableViewBinder<Element.UnderlyingCollection>) -> Disposable {

        let dataSource = Property<Element.UnderlyingCollection?>(nil)
        let disposable = CompositeDisposable()

        disposable += tableView.reactive.delegate.feed(
            property: dataSource,
            to: #selector(NSTableViewDelegate.tableView(_:heightOfRow:)),
            map: { (dataSource: Element.UnderlyingCollection?, tableView: NSTableView, row: Int) -> CGFloat in
                guard let dataSource = dataSource else { return tableView.rowHeight }
                return binder.heightForRow(at: row, tableView: tableView, dataSource: dataSource) ?? tableView.rowHeight
            }
