使用MVVM动态创建工具栏和工具栏项

时间:2014-03-22 16:25:02

标签: wpf xaml mvvm toolbar toolbaritems

该项目由WPF MVVMLight Framework组成。

对象是:创建一组工具栏,每个ToolBar也使用它的工具栏项目(为了清晰起见,按钮),在XAML中使用必要的“骨架”代码动态创建。

通过使用 HierarchicalDataTemplate 为它传播MenuItem,动态创建菜单的努力是成功的。

使用Menu,它只是创建每个Menu对象,其中包含一个MenuItem数组。

ToolBars的问题;但是,需要有一个数组的工具栏,其中包含另一个数组的项目......

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指示要创建哪个ToolBar,从而为以下内容创建按钮:TB 1(文件),TB 2(编辑),TB 3(视图),共有三个工具栏及其按钮。 / p>

 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执行DataBinding。

对于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如何创建工具栏及其关联的ToolBar项目?

提前致谢

1 个答案:

答案 0 :(得分:0)

结束使用XAML作为占位符的工具栏,然后使用所有项目的代码。