在另一个Usercontrol中执行方法的Separate Usercontrol

时间:2012-05-14 18:59:50

标签: c# wpf silverlight

我正在WPF中制作一个小游戏来更好地理解它,我有一个父控件有2个子用户控件。

第一个子用户控件具有更新第二个用户控件中对象位置的按钮。

在MainWindow.xaml.cs中 我有

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

如您所见,controllersplaceholder对GameView1一无所知。 要在GameView1中更新元素的位置,我必须将GameView1引用传递给ControllerView1并在GameView1()中执行方法。 问题是我该怎么做才能这样做 ControllerView1,ControllerView2将轻松地在GameView1中执行方法。

1 个答案:

答案 0 :(得分:3)

您可以使用events。只需在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();
    };