在另一个用户控件中执行方法的单独用户控件
本文关键字:控件 用户 单独 方法 另一个 执行 | 更新日期: 2023-09-27 18:34:11
我正在 WPF 中制作一个小游戏以更好地理解它,我有一个父控件,它有 2 个子用户控件。
第一个子用户控件具有更新对象在第二个用户控件中的位置的按钮。
在 MainWindow.xaml 中.cs我有
controllersplaceholder.Content = new ControllerView1()
gameplaceholder.Content = new GameView1()
如您所见,控制器占位符对 GameView1 一无所知。要更新 GameView1 中元素的位置,我必须将 GameView1 引用传递到 ControllerView1 中,并在 GameView1() 中执行方法。问题是我该怎么做才能做到控制器视图1,控制器视图2将轻松执行游戏视图1中的方法。
您可以使用事件。只需在您的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();
};