Помните, что MenuItem (и Menu) - это просто ItemsControls. Это означает, что вы можете привязать к нему коллекцию чего угодно. Другими словами, вы можете связать его с набором всего, что имеет ICommand (он же ваша модель представления).
Но мы не хотим этого, мы хотим, чтобы MenuItems были правы? Так что вы можете сделать коллекцию, которую вы привязываете к коллекции MenuItems, которую вы создаете за кулисами.
Однако мы не хотим, чтобы в коде были созданы элементы управления, если мы можем помочь. Это приводит к плохой тестируемости и в целом неуклюже.
Так что вместо этого мы можем привязать коллекцию ваших объектов бизнеса, но использовать пользовательский TypeConverter , чтобы преобразовать этот список в список элементов MenuIms, которые правильно привязаны к каждому из них. объект
Что действительно хорошо в этом подходе, так это то, что он работает независимо от глубины структуры меню. Преобразователь типов может пройти через вашу модель представления и рекурсивно добавлять новые привязки, которые, в свою очередь, используют один и тот же преобразователь типов
Другой вариант - создать DataTemplate для вашей модели представления элемента меню, которая, в свою очередь, содержит MenuItem, но я не совсем уверен, как обрабатывать жесты с использованием этого подхода. хотя это возможно, и такой подход также рекурсивен.