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 に渡される値は 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
4

1 に答える 1

4

これは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
于 2009-08-24T00:18:18.130 に答える