1

私はそれをよりよく理解するためにWPFで小さなゲームを作っています。私は2つの子ユーザーコントロールを持つ親コントロールを持っています。

最初の子ユーザーコントロールには、2番目のユーザーコントロール内のオブジェクトの位置を更新するボタンがあります。

MainWindow.xaml.csに私は

controllersplaceholder.Content = new ControllerView1()
gameplaceholder.Content = new GameView1() 

ご覧のとおり、controllersplaceholderにはGameView1に関する知識がまったくありません。GameView1の要素の位置を更新するには、GameView1参照をControllerView1に渡し、GameView1()でメソッドを実行する必要があります。問題は、ControllerView1、ControllerView2がGameView1のメソッドを簡単に実行できるようにするにはどうすればよいですか。

4

1 に答える 1

3

イベントを使用できます。でイベントを宣言するだけControllerView1です。

public event EventHandler RequestReposition;

オブジェクトを作成するときは、GameView1サブスクライブしてコントローラーのイベントに反応します。

var controller = new ControllerView1();
var gameView = new GameView1();
// here we're subscribing to controller's event
controller.RequestReposition += gameView.UpdatePosition;
controllersplaceholder.Content = controller;
gameplaceholder.Content = gameView;

これで、コントローラーからイベントを発生させるたびに、サブスクライブした人に通知され、適切なアクションが実行されます(サブスクライブされたメソッドの実行)。

ゲームビューメソッドは、イベントシグネチャと正確に一致する必要はないことに注意してください。匿名メソッドの少しの助けを借りて、一致するイベントハンドラーをその場で作成し、次の既存のメソッドを使用できますGameView1

// subscribtion with lambda
controller.RequestReposition += (sender, args) =>
    {
        gameView.UpdatePosition();
        gameView.Refresh();
    };
于 2012-05-14T19:05:58.633 に答える