我可以向 Xamarin.Mac 中的 NSPopUpButton 项目添加额外信息吗?

Can I add extra information to NSPopUpButton items in Xamarin.Mac?

我正在使用 Xamarin.Mac 在 C# 中构建一个 Mac OS 应用程序。我想用存储更多信息的项目填充下拉列表 (NSPopUpButton),而不仅仅是它们的标题和索引。具体来说,我希望每个项目也拥有自己的数据库 ID,这样当用户从下拉列表中选择该项目时,我可以轻松地从数据库中获取相关记录。

我看到 NSPopUpButton 使用 NSMenuItem 的实例,并且很容易将 NSMenuItem 子类化,但似乎没有办法直接插入实例。 AddItem() 方法只接受一个字符串(项目的标题)并且没有重载。有没有办法使用自定义项目,还是我只能使用标题和索引来区分?

谢谢!

通过 NSPopUpButton.Menu.AddItem 方法添加您的子类 NSMenuItem

示例 NSMenuItem:

public class MyNSMenuItem : NSMenuItem
{
    public string SomeCustomProperty { get; set; }
    
    ~~~~
    // add all the .ctors w/ base calls....
}

用法示例:

var popUpButton = new NSPopUpButton()
{
    Frame = new CGRect(100, 100, 100, 100),
    Title = "A pop button",
};
var menuItem = new MyNSMenuItem()
{
    Title = "Whosebug",
    SomeCustomProperty = "SomeInstance",
};
menuItem.Activated += (sender, e) =>
{
    Console.WriteLine((sender as MyNSMenuItem).SomeCustomProperty);
};
popUpButton.Menu.AddItem(menuItem);
this.View.AddSubview(popUpButton);