IronPythonでインターフェースのイベントを実装する

Pythonにはイベントを定義する構文がないから困った。

そんなときはadd_イベント名(self, handler)、remove_イベント名(self, handler) を実装する。

例えば、INotifyPropertyChangedインターフェースのPropertyChangedイベントだとこう。

class NotifyObject(INotifyPropertyChanged):
	def add_PropertyChanged(self, handler):
		if not hasattr(self, "_propertyChangedHandlers"):
			self._propertyChangedHandlers = [handler]
		else:
			self._propertyChangedHandlers.append(handler)

	def remove_PropertyChanged(self, handler):
		if not hasattr(self, "_propertyChangedHandlers"):
			self._propertyChangedHandlers = []
		else:
			try:
				self._propertyChangedHandlers.remove(handler)
			except ValueError:
				pass

	def RaisePropertyChanged(self, propertyName):
		if not hasattr(self, "_propertyChangedHandlers"):
			self._propertyChangedHandlers = []
		else:
			for handler in self._propertyChangedHandlers:
				handler(self, PropertyChangedEventArgs(propertyName))

 

こんな感じでイベントハンドラの管理も自分でやる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください