Могу ли я добавить дополнительную информацию к элементам NSPopUpButton в Xamarin.Mac?

Я создаю приложение для Mac OS на C # с помощью Xamarin.Mac. Я хотел бы заполнить раскрывающийся список (NSPopUpButton) элементами, в которых хранится больше информации, чем просто их заголовок и индекс. В частности, я хотел бы, чтобы каждый элемент также содержал свой собственный идентификатор базы данных, поэтому, когда пользователь выбирает этот элемент из раскрывающегося списка, я могу легко получить соответствующую запись из базы данных.

Я вижу, что NSPopUpButton использует экземпляры NSMenuItem, и достаточно легко создать подкласс NSMenuItem, но, похоже, нет способа вставить экземпляр напрямую. Метод AddItem () принимает только строку (заголовок элемента) и не имеет перегрузок. Есть ли способ использовать настраиваемые элементы, или я застрял только на заголовке и указателе, чтобы различать?

Спасибо!


person Nat Webb    schedule 18.12.2020    source источник
comment
В чем проблема с его подклассом и добавлением свойства для хранения дополнительной информации?   -  person SushiHangover    schedule 18.12.2020
comment
Я не могу понять, как добавить экземпляр этого подкласса к элементам NSPopUpButton. Единственный метод AddItem, который я вижу, принимает только строку (для свойства Title), а создаваемый им элемент является стандартным NSMenuItem.   -  person Nat Webb    schedule 19.12.2020
comment
Вам нужно использовать свойство NSPopUpButton.Menu, см. Мой ответ.   -  person SushiHangover    schedule 20.12.2020


Ответы (1)


Добавьте свой подкласс NSMenuItem с помощью метода NSPopUpButton.Menu.AddItem.

Пример 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 = "StackOverflow",
    SomeCustomProperty = "SomeInstance",
};
menuItem.Activated += (sender, e) =>
{
    Console.WriteLine((sender as MyNSMenuItem).SomeCustomProperty);
};
popUpButton.Menu.AddItem(menuItem);
this.View.AddSubview(popUpButton);
person SushiHangover    schedule 19.12.2020
comment
Вот что мне было нужно! Спасибо! - person Nat Webb; 21.12.2020