¿Cómo se implementa una interfaz en IronRuby que incluye CLR Eventos
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
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