     super
 
   dataChange: (value) ->
-    if !!value is !@invert
+    if !!value is not @invert
+      view = Batman.data @node, 'view'
+      view?.viewWillAppear? @node
+
       Batman.data(@node, 'show')?.call(@node)
       @node.style.display = @originalDisplay
-    else
-      hide = Batman.data @node, 'hide'
-      if typeof hide == 'function'
+
+      view?.viewDidAppear? @node
+    else
+      view = Batman.data @node, 'view'
+      view?.viewWillDisappear? @node
+
+      if typeof (hide = Batman.data(@node, 'hide')) is 'function'
         hide.call @node
       else
         $setStyleProperty(@node, 'display', 'none', 'important')
+      
+      view?.viewDidDisappear? @node
 
 class Batman.DOM.CheckedBinding extends Batman.DOM.NodeAttributeBinding
   dataChange: (value) ->

      true

    view: ->
      new Batman.DOM.ViewBinding(arguments...)
      false

    partial: (node, path, context, renderer) ->

        node: @node
        context: @renderContext

    Batman.data @node, 'view', @view

    @view.on 'ready', =>
      @view.awakeFromHTML? node
      @renderer.allowAndFire 'rendered'

    @die()

