Pregunta

estoy experimentando con IronRuby y WPF y me gustaría escribir mi propia comandos . Lo que tengo a continuación es por lo que yo puedo entender.

class MyCommand
  include System::Windows::Input::ICommand
  def can_execute()
    true
  end
  def execute()
    puts "I'm being commanded"
  end
end

Sin embargo, la interfaz ICommand define el evento CanExecuteChanged. ¿Cómo implemento que en IronRuby?

Edit: Gracias a la respuesta de Kevin

Esto es lo que trabaja basado en el cambio 27223 conjunto de la DLR. El valor pasado a can_execute y ejecutar son nulas.

class MyCommand
  include System::Windows::Input::ICommand
  def add_CanExecuteChagned(h)
    @change_handlers << h
  end
  def remove_CanExecuteChanged(h)
    @change_handlers.remove(h)
  end
  def can_execute(arg)
     @can_execute
  end
  def execute(arg)
    puts "I'm being commanded!"
    @can_execute = false
    @change_handlers.each { |h| h.Invoke(self, System::EventArgs.new) }
  end
  def initialize
    @change_handlers = []
    @can_execute = true
  end
end
¿Fue útil?

Solución

Parece que este fue implementado por Tomás algo recientemente :

Así que puede que tenga que compilar desde la última fuente en github

Parece que es necesario agregar un lugar para el manejador que se pasa en y se almacena. Es decir, mediante la adición de algunas rutinas y add_ remove_ para el controlador de eventos en cuestión. Algo como esto podría funcionar en base a sus necesidades (ingenuo, así que por favor probar y dar cuerpo a):

class MyCommand
  include System::Windows::Input::ICommand
  def add_CanExecuteChanged(h)
    @change_handler = h
  end

  def remove_CanExecuteChanged
    @change_handler = nil
  end

  def can_execute()
    true
  end

  def execute()
    #puts "I'm being commanded"
    @change_handler.Invoke if @change_handler
  end
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top