我已经阅读了很多文章来解决这个问题,但我无法让它发挥作用。
情况: 我有一个 WPF 主窗口,我正在其中加载 UserControls。 主窗口应该监听名为“导航”的类中的事件处理程序。该事件将在用户控件中发生某些更改时触发。
到目前为止,我可以确认 UserControls 可以触发事件,但 MainWindow 不会拾取 Throw。
导航类别:
public class Navigation
{
public delegate void EventHandler(object sender, EventArgs args);
public event EventHandler ThrowEvent = delegate { };
public void NavigationUpdateEvent()
{
ThrowEvent(this, new EventArgs());
}
}
用户控制:
public delegate void EventHandler(object sender, EventArgs args);
public event EventHandler ThrowEvent = delegate { };
Navigation myNavigation = new Navigation();
public myUserControl()
{
InitializeComponent();
}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
if (cbCheckBox.IsChecked.Value)
{
UMENavigation.NavigationUpdateEvent();
}
}
主窗口:
private void DoSomething()
{
MessageBox.Show("It worked!");
}
private Navigation _Thrower;
public MainWindow()
{
InitializeComponent();
_Thrower = new Navigation();
_Thrower.ThrowEvent += (sender, args) => { DoSomething(); };
}
但是,_Thrower 永远不会接收到已触发的事件..
非常感谢任何帮助!这开始受伤了:)
你好,汤姆
最佳答案
UserControl
和 MainWindow
中的
Navigation
实例是不同的。
UserControl
为其自己的实例触发事件。同时,MainWindow
监听来自其自身实例的事件。
要么使用Navigation
的单个实例,要么在UserControl
中创建代理事件并在MainWindow
中订阅它。
此外,您不需要声明您的EventHandler
。已经declared .
关于C# WPF 订阅从 UserControl 激发的另一个类中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178435/