3

我正在试验 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 中实现它?

编辑:感谢凯文的回应

这是基于 DLR 的 27223 更改集的工作原理。传递给 can_execute 和 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
4

1 回答 1

4

看起来这是由 Tomas最近实现的:

所以你可能需要从github 上的最新源编译

It looks like you need to add a place for the handler to be passed in and stored. Namely, by adding some add_ and remove_ routines for the specific event handler in question. Something like this might work based on your needs (naive, so please test and flesh out):

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
于 2009-08-24T00:18:18.130 回答