Better way to listen for events on a Xamarin.Mac object?

89 Views Asked by At

I'm writing a menubar app with pure C# and Xamarin.Mac (no Xcode, so no storyboard), and I find it annoying that when I want to listen for events on an object.

I'm aware I can write something like

public class MenuDelegate : NSMenuDelegate {
    public class HighlightChangedEventArgs : EventArgs {
        public NSMenuItem? Item { get; set; }
    }
    public event EventHandler<HighlightChangedEventArgs?>? HighlightChanged;
    public override void MenuWillHighlightItem(NSMenu menu, NSMenuItem item) { Opened.Invoke(menu, new HighlightChangedEventArgs() { Item = item }); }
    public event EventHandler? Opened;
    public override void MenuWillOpen(NSMenu menu) { Opened.Invoke(menu, null); }
    public event EventHandler? Closed;
    public override void MenuDidClose(NSMenu menu) { Closed.Invoke(menu,null); }
}


var menuDelagate = new MenuDelegate();
sbIcon.Menu.Delegate = menuDelegate;
menuDelegate.HighlightChanged += (object sender, MenuDelegate.HighlightChangedEventArgs args) => {
    /// stuff
};

however this is quite annoying to do, so I was wondering if there was an easier way.

0

There are 0 best solutions below