1

我正在 WPF 中制作一个小游戏以更好地理解它,我有一个有 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 回答