如何实现在IronRuby中包括CLR事件的接口(How do I Implement an int

2019-08-02 05:43发布

我和IronRuby和WPF的实验,我想我自己写的命令 。 我有下面就为是我可以找出。

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

但ICommand接口定义CanExecuteChanged事件。 如何实现在IronRuby的?

编辑:感谢凯文的回应

下面是根据配置的27223变更集的DLR的。 传递到can_execute和执行的价值是零。

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

Answer 1:

它看起来像这是由Tomas实现最近有点 :

所以,你可能需要从最新的源代码编译的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


文章来源: How do I Implement an interface in IronRuby that includes CLR Events