【问题标题】:C# WPF Subscribe to Event in another Class fired from a UserControlC# WPF 订阅从 UserControl 触发的另一个类中的事件
【发布时间】:2014-08-07 09:07:33
【问题描述】:

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

情况: 我有一个 WPF MainWindow,我将 UserControls 加载到其中。 主窗口应该监听一个名为 Navigation 的类中的 EventHandler。该事件将在用户控件中的某些更改时触发。

到目前为止,我可以确认 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 永远不会收到 Fired Event..

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

你好,汤姆

【问题讨论】:

  • 明智地命名它应该被称为 RaiseEvent 而不是 ThrowEvent

标签: c# wpf mainwindow eventhandler


【解决方案1】:

UserControlMainWindow 中的Navigation 实例不同。 UserControl 为其自己的实例触发事件。同时,MainWindow它的 自己的实例中监听事件。

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

此外,您无需声明您的EventHandler。已经是declared了。

【讨论】:

  • 谢谢丹尼斯,我现在已经密封了导航类,它似乎几乎可以工作了。 MainWindow 已订阅,但我只是不知道如何从 UserControl 触发事件。有什么提示吗? Navigation.NavigationUpdateEvent();不再起作用,因为它需要对象引用:/
猜你喜欢
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多