WPF Własny event problem z przechwyceniem wywołania

0

Mam klasę w której mam zadeklarowany własny event.

public delegate void MyEventHandler(string test);

public class TestOwnEvent
{
	public event MyEventHandler My_TestOwnEvent;

	public void My_TestOwnEventMethod(string test) => OnMy_TestOwnEvent(test);

	protected virtual void OnMy_TestOwnEvent(string test) => My_TestOwnEvent?.Invoke(test);
}

Następnie przed tworzeniem nowego okna, tworzę obiekt tej klasy, potem okno a następnie wywołuję metodę My_TestOwnEvent z klasy TestOwnEvent. W konstruktorze okna przekazuje testOwnEvent.

TestOwnEvent testOwnEvent = new TestOwnEvent();

MyNewWindow1 myNewWindow1 = new MyNewWindow1(testOwnEvent);
myNewWindow1.Show();

                
testOwnEvent.My_TestOwnEventMethod("Handle message");

Potem w nowym oknie MyNewWindow1 w konstruktorze dodaje nasłuch na ten event:

 public MyNewWindow1(TestOwnEvent testOwnEvent)
        {
            testOwnEvent.My_TestOwnEvent += OnMy_TestOwnEvent;
        }

        private void OnMy_TestOwnEvent(string test)
        {
            MessageBox.Show(test);
        }

I problem polega na tym że MessageBox otwiera się tylko dla nowego okna, a jak na przykład mam 2 otwarte okna z klasy MyNewWindow1 to nie wyświetli się dla poprzednich tylko zawsze dla nowego. Ja chcę by również dla tych poprzednich się MessageBox wywołał.

1

Bardziej powinieneś pójść w tym kierunku:
Tutaj tworzenie nowego okna

public partial class MyNewWindow : Window
    {
        public MyNewWindow(string windowName)
        {
            InitializeComponent();
            WindowName = windowName;
        }

        public string WindowName { get; set; }

        public event EventHandler<AnyEventEventArgs> AnyEvent;
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            AnyEvent?.Invoke(this, new AnyEventEventArgs() { WindowName = WindowName });
        }
    }

Tutaj wywoływanie okien:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            myNewWindow1 = new MyNewWindow("Window1");
            myNewWindow1.AnyEvent += MyNewWindow_AnyEvent;
            myNewWindow2 = new MyNewWindow("Window2");
            myNewWindow2.AnyEvent += MyNewWindow_AnyEvent;
            myNewWindow1.Show();
            myNewWindow2.Show();
        }

        private void MyNewWindow_AnyEvent(object? sender, AnyEventEventArgs e)
        {
            MessageBox.Show(e.WindowName);
        }

        public readonly MyNewWindow myNewWindow1;
        public readonly MyNewWindow myNewWindow2;
    }

Wynik:
screenshot-20220514191518.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1