Динамическое создание элементов панели инструментов и панели инструментов с использованием MVVM

Проект составлен с использованием WPF MVVMLight Framework.

Цель состоит в том, чтобы: создать набор панелей инструментов, при этом каждая панель инструментов также имеет элементы панели инструментов (кнопки для ясности), созданные динамически, используя только необходимый "каркасный" код в XAML.

Попытка динамически создавать меню была успешной благодаря использованию HierarchicalDataTemplate для распространения элементов Menu для него.

С Меню это просто создавало каждый объект Меню с массивом MenuItems внутри него.

Проблема с панелями инструментов; однако, это то, что должен быть массив ToolBars с другим массивом Items внутри него...

public enum SiClopsExplorerToolbarType
{
    #region file
    [Description( "New Folder" )]
    [TypeId( 1 )]
    Folder ,

    [Description( "New File" )]
    [TypeId( 1 )]
    File ,
    .
    .
    #endregion // file

    #region edit
    [Description( "Cut" )]
    [TypeId( 2 )]
    Cut ,

    [Description( "Copy" )]
    [TypeId( 2 )]
    Copy ,

    [Description( "Paste" )]
    [TypeId( 2 )]
    Paste ,
    #endregion // edit

    #region view
    [Description( "SI-CLOPS Explorer" )]
    [TypeId( 3 )]
    SiClopsExplorer ,

    [Description( "Publication Data" )]
    [TypeId( 3 )]
    PublicationData ,
    #endregion // view
}

... TypeId для каждого перечисления указывает, для какой панели инструментов создать и, таким образом, создать кнопки для: TB 1 (файл), TB 2 (редактирование), TB 3 (просмотр) для трех панелей инструментов и их кнопок.

 public class ToolbarEntity
{
    #region constructor

    #endregion // constructor
    public ToolbarEntity()
    {
        Toolbars = new List<ToolbarEntity>();
    }
    #region properties
    public IList<ToolbarEntity> Toolbars { get; set; }
    /// <summary>
    /// The Description value of the MDI child-menu-type enumerated object is used as the display value for each menu item.
    /// </summary>
    public string Text { get; set; }

    /// <summary>
    /// An integer denoting the menu-level. Top level menus are zero. 1st sub-level menus are one, etc.
    /// </summary>
    public int MenuLevel { get; set; }

    /// <summary>
    /// Top Level menus are given a unique id so can delineate the start of the next top-level menu.
    /// </summary>
    public int MenuId { get; set; }
    #endregion // properties
}

Выше приведен простой класс, который будет использоваться в качестве модели MVVM, в которой будет выполняться привязка данных для представления.

Для самого View желательно что-то вроде следующего:

 <ToolBarTray DockPanel.Dock="Top">

        <!-- Dynamically created or hardcoded in XAML... -->
        <ToolBar >
            <!-- Dynamically created ToolBar items... -->
            <Button />
        </ToolBar>

        <!-- Dynamically created or hardcoded in XAML... -->
        <ToolBar >
            <!-- Dynamically created ToolBar items... -->
            <Button />
        </ToolBar>

    </ToolBarTray>

Как панели инструментов и связанные с ними элементы панели инструментов будут созданы ViewModel?

заранее спасибо

1 ответ

Решение

Закончилось только использованием XAML для панелей инструментов в качестве заполнителей, а затем с использованием кода для всех элементов.

Другие вопросы по тегам