我正在尝试IronRuby和WPF,我想编写自己的commands。据我所知,下面的内容。
class MyCommand
include System::Windows::Input::ICommand
def can_execute()
true
end
def execute()
puts "I'm being commanded"
end
end
但是ICommand接口定义了CanExecuteChanged事件。如何在IronRuby中实现呢?
编辑:感谢凯文的回应
这是基于DLR的27223更改集而起作用的。传递给can_execute和execute的值为nil。
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
最佳答案
看来这是由Tomas somewhat recently实现的:
因此,您可能需要从github的最新源进行编译
看来您需要为处理程序传递和存储添加一个位置。即,通过为所讨论的特定事件处理程序添加一些add_和remove_例程。
根据您的需求,这样的事情可能会起作用(天真,所以请测试并充实):
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