суббота, 15 января 2011 г.

Построение меню на основе иерархических данных

Столкнулся с проблемой: есть структура данных в виде иерархического дерева. Необходимо показать эту структуру в виде главного меню формы.

Структура имеет вид:

    public class MenuCommand 
    {
        /// 
        /// Команда которую необходимо выполнить при выборе данного элемент
        /// 
        private DelegateCommand _command;
 
        public ICommand Command
        {
            get
            {
                return _command;
            }
        } 
        /// 
        /// Заголовок команды (отображается в списке)
        /// 
        public string Title { getset; }       
        /// 
        /// Подпункты меню
        /// 
        public List<MenuCommand> Children { getset; }
    }
 Привязка коллекции таких элементов в лоб к ItemsSourse у Menu не работает. Точнее работает, и даже показывает пункты меню первого уровня, но пункты содержащие подпункты содержат стрелочку для открытия в право (но, кстати, не открываются). Единственное решение, которое смог придумать быстро, вот такое:
 1. Создаем стиль.

            <Style x:Key="menuItemStyle">
                <Setter Property="MenuItem.Header" Value="{Binding Path=Title}"/>
                <Setter Property="MenuItem.ItemsSource" Value="{Binding Path=Children}"/>
                <Setter Property="MenuItem.Command" Value="{Binding Path=Command}"/>
            Style> 2. Создаем. как это не прискорбно 1 статический пункт меню. У которого и осуществляем привязку коллекции.

        <Menu>
            <MenuItem ToolTip="Меню" ItemsSource="{Binding Commands}" ItemContainerStyle="{StaticResource menuItemStyle}">
                <MenuItem.Header>
                    <Image Source="/Images/image.jpg" />
                MenuItem.Header>
            MenuItem>
        Menu>
 Ну вот собственно и все. Заработало. 

Комментариев нет:

Отправить комментарий