C# WPF 订阅从 UserControl 激发的另一个类中的事件

标签 c# wpf mainwindow eventhandler

我已经阅读了很多文章来解决这个问题,但我无法让它发挥作用。

情况: 我有一个 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 永远不会接收到已触发的事件..

非常感谢任何帮助!这开始受伤了:)

你好,汤姆

最佳答案

UserControlMainWindow 中的

Navigation 实例是不同的。 UserControl 为其自己的实例触发事件。同时,MainWindow 监听来自其自身实例的事件。

要么使用Navigation的单个实例,要么在UserControl中创建代理事件并在MainWindow中订阅它。

此外,您不需要声明您的EventHandler。已经declared .

关于C# WPF 订阅从 UserControl 激发的另一个类中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178435/

相关文章:

objective-c - 检查应用程序的主窗口是否打开并加载

c# - 无法排序,因为 IComparer.Compare() 方法返回不一致的结果。再次

c# - 在 C# 中仅获取输出参数中的第一个字符

c# - 如何在 Linux 和 MacOS 上导入 PKCS#8 - CngKey.Import 不可用

wpf - 如何将DataGrid转换为dataTable

winapi - 使用 PostMessage 模拟鼠标事件而不获得焦点 (WINAPI)

delphi - 如何防止在显示文件对话框时显示Delphi MainForm?

c# - 项目停止构建并将 '.1' 附加到项目 .dll

c# - 删除字典中的所有条目 c# WPF

c# - DataGrid 列宽不会自动更新