MVVM Dynamic Menu UI desde el enlace con ViewModel

Estoy trabajando con un equipo en la aplicación LoB. Nos gustaría tener una dinámica.Menu control, que crea el menú basado en el perfil de usuario registrado. En los escenarios de desarrollo anteriores (a saber, ASP.NET) utilizamos para iterar a través de los datos que describen la recopilación y la generación.MenuItem dinamicamente. En MVVM, ¿cómo haría esto? ¿Puedo separar la vista XAML de ViewModel que describe los elementos del menú?

Solución:

Con los comentarios de los comentaristas pude enlazarMenu dinámicamente con los datos de ViewModel. Estaartículo Fue de gran ayuda también.

XAML:

<HierarchicalDataTemplate DataType="{x:Type self:Menu}" ItemsSource="{Binding Path=Children, UpdateSourceTrigger=PropertyChanged}">
    <ContentPresenter Content="{Binding Path=MenuText}" RecognizesAccessKey="True"/>
</HierarchicalDataTemplate>

[...]

<Menu Height="21" Margin="0" Name="mainMenu" VerticalAlignment="Top" HorizontalAlignment="Stretch" 
      ItemsSource="{Binding Path=MenuItems, UpdateSourceTrigger=PropertyChanged}" ItemContainerStyle="{StaticResource TopMenuItems}">
    <Menu.Background>
        <ImageBrush ImageSource="/Wpf.Modules;component/Images/MenuBg.jpg" />
    </Menu.Background>
</Menu>

Menu clase de datos:

public class Menu : ViewModelBase
{
    public Menu()
    {
        IsEnabled = true;
        Children = new List<Menu>();
    }

    #region [ Menu Properties ]

    private bool _isEnabled;
    private string _menuText;
    private ICommand _command;
    private IList<Menu> _children;

    public string MenuText
    {
        get { return _menuText; }
        set
        {
            _menuText = value;
            base.OnPropertyChanged("MenuText");
        }
    }

    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            _isEnabled = value;
            base.OnPropertyChanged("IsEnabled");
        }
    }

    public ICommand Command
    {
        get { return _command; }
        set
        {
            _command = value;
            base.OnPropertyChanged("Command");
        }
    }

    public IList<Menu> Children
    {
        get { return _children; }
        set
        {
            _children = value;
        }
    }

    #endregion
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta